继承

继承的基本语法

继承:在JAVA中 ,用extends关键字来表示一个继承另一个类.

public class extends Bass{
  ...
}

以上代码表示Sub继承了Bass类.那么Sub继承了Bass类的那些东西呢?

  • 当Sub类和Bass类位于同一个包中Sub类继承Bass类中public,protected和默认访问级别的成员变量和方法.
  • 当Sub类和Bass类位于不同一个包中Sub类继承Bass类中public,protected访问级别的成员变量和成员方法.

Java语言不支持多继承即一个类只能直接继承一个类否则导致变异错误.

例如:

public class Sub extends Bass1,Bass2,Bass3{...}

尽管一个类只能有一个直接父类,但它可以有多个间接父类.

例如:

class Bass1 extends Bass2{...}
class Bass2 extends Bass3{...}

所有的Java类都直接或间接地继承了java.lang.Object类.

方法重载

类的同种功能有多重种实现方式.

例如:

java.lang.max()方法能够从两个数中区出最大值,他有多种实现方式.

以下程序多次调用类的max()方发,运行时,Java虚拟机先判断给定的参数的类型然后在判定执行那个nax()方法.

方法重载必须满足的条件:

  • 方法名相同
  • 方法的参数类型,个数,顺序至少有一项不同.
  • 方法的返回类型可以不同
  • 方法的修饰符不可以相同

下面我们来看一下题目来看一下那些类可以构成重载

例如:在Sample类中已定义了一个amethod()方法.

 方法覆盖

public voidwrite(){
//用手写字
...
}

由于Sub1类的写字的实现方式与Base类不一样,因此在Sub1类中必须重新定义write()方法.

public void write(){
//用脚写字
...
}

 覆盖方法必须满足多种约束.

  • 子类方法的名称,参数签名和返回类型一致
  • 子类方法不能缩小父类方法的访问权限
  • 子类方法不能抛出比父类方法更多的异常
  • 方法覆盖只存在与子类和父类之间在同一个类中方法只能被重载,不能被覆盖
  • 父类的静态方法不能被子类覆盖为非静态方法
  • 子类可以定义与父类的静态方法,以便在子类中隐藏父类的静态方法
  • 父类的非静态方法不能被子类覆盖
  • 父类的私有态方法不能被子类覆盖

方法重载与方法覆盖的异同

 组合与继承对决

                                                                组合与继承的对应关系

组合关系 继承关系
局部类 父类
整体类 子类
从整体到局部的类的分解过程 从子类到父类的抽象过程
从局部到整体的类的组合过程 从符类到子类的扩展过程

使用继承关系:

 

使用组合关系

更多详情请关注 http://www.cnblogs.com/baixingqiang/
原文地址:https://www.cnblogs.com/baixingqiang/p/5531311.html