一、语法
1.
-
子类和父类位于同一个包中:子类继承父类的public,protected和默认访问级别的成员变量及成员方法
-
位于不同包中:子类继承父类public和protected的成员变量和方法
2.java不支持多继承,一个类只能直接继承一个类
二、方法重载(Overload)
重载方法必须满足的条件:
-
方法名必须相同
-
方法的参数类型、参数个数、参数顺序至少有一项不同
-
方法的返回类型可以不相同
-
方法的修饰符可以不相同
三、方法覆盖(Override)
覆盖必须满足的约束:
-
子类方法的名称、参数签名和返回类型必须与父类方法一致。
-
子类方法不能缩小父类方法的访问权限。 why?假设可以缩小,Sub类覆盖了Base类的method方法并将访问权限缩小为private,根据java的多态机制,Base base = new Sub(); base.method(); 是允许的,显然这与method的权限相矛盾。
-
子类方法不能抛出比父类方法更多的异常。 why?与java多态机制相冲突,声明为父类的子类对象在调用覆盖方法时可能会有异常无法捕捉到,所以java禁止子类方法抛更多的异常。
-
父类的静态方法不能被子类覆盖为非静态方法,覆盖规则与上述三条相同。父类的非静态方法也不能被覆盖为静态方法。
-
父类的抽象方法可以通过两种方式被覆盖:a. 子类实现父类的抽象方法。b. 子类重新声明父类的抽象方法
-
父类的非抽象方法可以被覆盖为抽象方法。
四、super关键字
使用super关键字可以使父类的被屏蔽方法或变量在子类中变得可见。以下场合会出现父类方法或变量被子类屏蔽的现象
-
子类覆盖了父类的某个方法,则在子类范围内,父类的此方法不可见。
-
子类中定义了和父类同名的成员变量时,则在子类范围内,父类的该成员变量不可见
在程序中,以下情况会使用super关键字
-
在子类的构造方法中,使用super调用父类的构造方法
-
在子类中访问父类被屏蔽的方法和属性
注:即使子类没有通过super显式调用父类构造器,虚拟机仍会在子类构造器调用前隐式调用父类无参构造器一次。
五、继承的弊端与使用原则
阅读(577) | 评论(0) | 转发(0) |