java——继承

2022年1月3日 5点热度 0条评论

继承

 

继承1 继承的好处2 继承的细节3 如果父类和子类都有同一个属性(比如name)那么查找时遵循以下原则4 this和super区分

 

 

1 继承的好处

  1. 代码的复用性提高了

  2. 代码的扩展性和维护性提高了

2 继承的细节

  1. 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问,私有的属性private不能在子类直接访问,要通过父类提供公共的方法去访问

补充细节如下

 访问修饰符号
 
 public        同类 同包 子类 不同包
 
 protected     同类 同包 子类
 
 默认           同类 同包
 
 private       同类
 
      修饰符使用的注意事项
 
 1. 修饰符可以用来修饰类中的属性,成员方法以及类
 2. 只有默认的和public才能修饰类,并且遵循上述访问权限的特点
 3. 成员方法的访问规则和属性完全一样

 

  1. 子类必须调用父类的构造器,完成父类的初始化

  1. 当创建子类对象时,不管使用子类哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过

  2. 如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)

  3. super在使用时,需要放在构造器的第一行

  4. super()和this()都只能放在构造器的第一行,以此这两个方法不能共存在一个构造器

  5. java所有类都是Object类

  6. 父类构造器的调用不限于直接父类!将一直往上追溯到Object类(顶级父类)

  7. 子类最多只能继承一个父类(指直接继承),即java中是单继承机制

  8. 不能滥用继承,子类和父类之间必须满足 is—a 的逻辑关系

3 如果父类和子类都有同一个属性(比如name)那么查找时遵循以下原则

  1. 首先看子类是否有该属性

  2. 如果子类有这个属性,并且可以访问,则返回信息

  3. 如果子类没有这个属性,就看父类有没有这个属性(如果父类有这个属性,并且可以访问,就返回信息...)(相当于创建一个新的String类把父类的String类给覆盖了)(但是父类的String类也可以访问,比如用方法来访问)

  4. 如果父类没有,就按照(3)的规则继续找上级父类,直到Object...

4 this和super区分

NO. 区别点 this super
1 访问属性 访问本类中的属性,如果本类没有此属性则从父类中继续查找 父类开始查找属性
2 调用方法 访问本类中的方法,如果本类没有此方法则从父类中继续查找 父类开始查找方法
3 调用构造器 调用本类构造器,必须放在构造器的首行 调用父类构造器,必须放在子类构造器的首行
4 特殊 表示当前对象 子类中访问父类对象

super关键字

 

super关键字1 基本介绍2 基本语法3 super给编程带来的便利/细节4 找方法时,顺序是:

 

 

1 基本介绍

super代表父类的引用,用于访问父类的属性、方法、构造器

2 基本语法

  1. 访问父类的属性,但不能访问父类的private属性 :super.属性名

  2. 访问父类的方法,不能访问父类的private方法: super.方法名(参数列表)

  3. 访问父类的构造器 super(参数列表);只能放在构造器的第一句,只能出现一句!

3 super给编程带来的便利/细节

  1. 调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化

  2. 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super,this,直接访问是一样的效果

  3. super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员,如果多个基类(上级类)中都有同名的成员,使用super访问遵循就近原则 A -> B -> C

4 找方法时,顺序是:

  1. 先找本类,如果有,则调用

  2. 如果没有,则找父类(如果有,并可以调用,则调用)

  3. 如果父类没有,则继续找父类的父类,整个规则,就是一样的,直到Object类

提示:如果查找方法的过程中,找到了,但是不能访问,则报错

如果查找方法的过程中,没有找到,则提示方法不存在