Day8 类的继承
观察两个类的成员组成
提取相同的属性和方法
继承定义
是使用已存在的类作为基础建立新类的技术。
单一继承:只有一个父类。
父类可以叫做基类、超类。子类可以叫做派生类。
继承注意事项
子类可以继承父类中的成员(属性和方法)。
但是需要注意:
2.子类和父类不在同一个程序包,使用默认访问权限的成员不能继承
3.构造器不能继承。
设计继承关系要符合里氏替换原则。is-a关系
子类是父类,可以完全替换掉父类,代码没有任何影响。
里氏替换原则(LSP):在一个软件系统中,子类对象可以替换所有使用的父类对象,且程序行为没有变化
在子类中,子类中的方法名、参数、返回值和父类中的完全相同,那么叫做子类重写了父类中的方法。
只有实例成员方法才能重写。静态成员方法、静态变量、实例成员变量不能重写,隐藏。
重写可以实现多态,隐藏不能实现多态
2.参数 父类擦除后与子类一致;或者与子类完全一致。
3.返回值类型 可以完全一致,如果是引用类型,允许子类的返回值类型是父类的 子类
4.访问修饰符 子类不能比父类更严格。
5.异常处理 不能比父类范围更大。
1.子类修改了父类中的功能。
2.子类扩展了父类中的功能。
class 父类手机{ public void 来电显示(){ 显示电话号; } }
class 子类手机 extends 父类手机{ public void 来电显示(){ 显示电话号; 显示人名; 显示地址; } }
表示父类范围
super关键和this作用类似,是被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。
不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是直接父类(就是类之上最近的超类)。
super的用法
第一、在子类构造方法中要调用父类的构造方法,用“super(参数列表)”的方式调用,参数不是必须的。同时还要注意的一点是:“super(参数列表)”这条语句只能用在子类构造方法体中的第一行。
第二、当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变量覆盖父类成员变量时,用“super.成员变量名”来引用父类成员变量。当然,如果父类的成员变量没有被覆盖,也可以用“super.成员变量名”来引用父类成员变量,不过这是不必要的。
第三、当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有完全相同的方法定义(但方法体可以不同),此时,用“super.方法名(参数列表)”的方式访问父类的方法。