Day 10 封装,继承
封装:
步骤:
1. 属性私有化
2. 提供公共的get,set方法
当使用有参构造器时,记得要将set方法放进构造器中,否则set方法中的输入验证就无法生效了!!
继承:extends
解决代码复用性太高的问题

语法:
class 子类 extends 父类{
}
当 子类 和 父类 在同一个包中时, 子类可以直接访问父类中public,protected,默认修饰符 修饰的属性和方法; 如果想要访问private的属性和方法,必须在父类中提供一个public 修饰的getXxx方法, 通过这个getXxx方法来访问private 属性。
⚠️ 当子类继承父类之后,调用子类无参构造器时, 系统会自动默认的调用super(); 会自动调用父类的无参构造器!!!不管写不写都会自动调用!
当创建子类对象时, 无论使用哪个构造器,都会首先自动调用父类的无参构造器!
如果父类没有提供无参构造器,那么必须在子类的构造器中 显现的 写出 super(实参.....); 指定使用一个父类的有参构造器来完成对父类的初始化。 否则会报错!!
super(); 和 this(); 都必须放在构造器的第一行,所以super和this 不能同时使用!
Object是所有类的父类!
子类最多只能直接继承一个父类。 java是单继承机制
继承的内存布局:

注意:
1. 类信息加载的顺序是: 从顶级类 到 子类
2. 信息查找的顺序是: 就近原则, 本类没有再往上找。
3. 如果son 要访问 age 属性,但是 Father 类中的age是private的, 那么就会直接报错, 即使GrandPa类中的age是public 的,也不会再向上找了!

super关键字:
super代表父类的引用,可以访问父类的属性,方法,构造器
不能访问父类的private 属性 和 方法
好处:父类属性由父类初始化,子类属性由子类初始化,分工明确
访问父类构造器必须放在构造器的第一行!(注意:如果存在继承关系,子类构造器中没写super(); 也会默认先调用super() 父类的无参构造器,如果父类的无参构造器被覆盖,则必须显示的调用super(参数列表)

方法重写/覆盖:(Override)
子类重写父类的方法: 方法名和参数必须相同, 子类的返回类型 必须是 父类返回类型的 子类或者相同 ( 协变返回类型)!
子类方法 不能 缩小 父类方法的 访问权限, 可以扩大!! public > protected > 默认 > private


浙公网安备 33010602011771号