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

 

posted @ 2021-09-24 23:50  Shawn_T  阅读(22)  评论(0)    收藏  举报