第13篇 继承知识点综合

1.继承

  • java 只有单继承 关键字:extends
class A{}//父类
class B extends class A{}//子类B继承了A类

2.继承权限

  • 相较于C++ 的public,protected, private,java对不写继承的default的定义不一样:

    • c++ default = private
    • Java不写则默认是 default,是一个新的权限, 所以 Java 有四种 public,protected, private,default。
  • default :包访问权限
    默认访问权限没有关键字,通常被称为包访问权限 (packageaccess) (有时也称为friendly)。

    • 这意味着当前包中的所有其他类都可以访问那个成员。对于这个包之外的类,这个成员看上去是private 的。
    • 由于一个编译单元(即一个文件)只能隶属于一个包,所以通过包访问权限,位于同一编译单元中的所有类彼此之间都是可访问的。包访问权限可以把相关类聚到一个包下,以便它们能轻易地相互访问。

3.访问调用逻辑

  • 子类获取到了父类声明中的全部属性与方法(构造器除外,构造器只能被子类调用)。但是受到封装性的影响,可能不能直接调用。

  • 在子类方法中访问一个变量或者方法:最先在子类局部范围找,如果没有就在子类成员范围找,最后在父类成员范围找,如果都没有就报错(不考虑父亲的父亲之类的祖先)

  • 勘误:上面这条查找关系的逻辑错误,正确情况是:子类中如果没找到,会去父类中查找,如果还是没有会一直查到 Object 类为止,还是没有才会报错。如果其中有祖先有定义了待查的变量或者方法,但是没给访问权限,会停止溯源直接报错。

    • 其实很好理解,因为子类继承了父类的信息,所以子孙也拥有祖先的信息才对,可以套娃式地溯源是理所应当的
    • 理解是这么理解,和实际上方法和变量在JVM的继承的实现逻辑还是有一点区别的,实例对象由对象头、示例数据、对齐填充三个字段构成。对象头存了Klass指向当前类的定义(该定义存了指向父类的定义的指针),实例数据字段存的才是包括父类在内的实例变量。所以方法的溯源和变量的溯源在实际中还是有区别的。

4. Object类

Java 中所有类都会继承Object类,无论程序中有没有显式写明这种继承关系。有点像JS对象中的原型prototype的prototype即Object。

5. Super关键字

​ 加了super 关键字后 同名 属性 或者 方法 直接直接指向 父类

class Person{
String name;
}
Class Man extends Person{
String name;
void showName(String name){
System.out,println(name);//指向形参name
System.out.println(this.name);//指向当前实例 Person 中的name
System.out.println(super.name);//指向父类Person的name
}
}

6. this()与super()

  • 定义:

    • this()是调用当前类的构造器,()内带参数就是有参构造,无参数就是无参构造

    • super()是调用父类的构造器,()内带参数就是有参构造,无参数就是无参构造

  • 作用:

    • 子类继承父类时,不会继承父类的构造器,只能通过super(形参列表)的方式调用父类指定的构造器
    • 子类想要扩展构造器初始化更多的实例变量,通常可以用this(形参列表)来避免代码的重复
  • 使用方式:

    • super(形参列表)必须放在构造器方法体的首行, this(形参列表) 亦是如此

      • 子类构造器首行可以是 this(形参列表) 或者 super(形参列表),不写的话编译器去就默认添加 super()无参
      • this(形参列表)super(形参列表) 都要求放首行,所以想要显式调用,只能二选一。
    • 推论

      • 子类须要调用 super(形参列表),所以子类至少有一个构造器满足第一行调用了 super(形参列表)

      • 子类如果有构造器首行显式调用了this(形参列表) ,则一定嵌套调用了一个带 super(形参列表)的构造器

7.多继承

  • java 的类没有多继承,只有单继承
  • java 的接口可以多继承
posted @   问稻  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示