继承的基本语法
继承:在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(){ //用脚写字 ... }
覆盖方法必须满足多种约束.
- 子类方法的名称,参数签名和返回类型一致
- 子类方法不能缩小父类方法的访问权限
- 子类方法不能抛出比父类方法更多的异常
- 方法覆盖只存在与子类和父类之间在同一个类中方法只能被重载,不能被覆盖
- 父类的静态方法不能被子类覆盖为非静态方法
- 子类可以定义与父类的静态方法,以便在子类中隐藏父类的静态方法
- 父类的非静态方法不能被子类覆盖
- 父类的私有态方法不能被子类覆盖
方法重载与方法覆盖的异同
组合与继承对决
组合与继承的对应关系
组合关系 | 继承关系 |
局部类 | 父类 |
整体类 | 子类 |
从整体到局部的类的分解过程 | 从子类到父类的抽象过程 |
从局部到整体的类的组合过程 | 从符类到子类的扩展过程 |
使用继承关系:
使用组合关系