2024年java继承基础教学

java继承基础教学目录 一 子类到底能继承父类中的哪些内容 二 虚方法表 三 静态方法与虚方法表 四 继承内存图 五 继承中 成员变量和成员方法的访问特点 一 成员变量的访问特点 二 成员方法的访问特点 1 this 与 super 访问成员方法的特点 2 方法重写 2 1 方法重写的本质 子类覆盖了从父类继承的虚方法表里的方法 2 2 方法重写注意事项和要求 六

大家好,我是讯享网,很高兴认识大家。



目录

一、子类到底能继承父类中的哪些内容?

二、虚方法表

三、静态方法与虚方法表

四、继承内存图

五、继承中:成员变量和成员方法的访问特点

(一)成员变量的访问特点

(二)成员方法的访问特点

1.this与super访问成员方法的特点

2.方法重写

2.1方法重写的本质:子类覆盖了从父类继承的虚方法表里的方法。

2.2方法重写注意事项和要求

六、继承中:构造方法的访问特点

七、super与this关键字


一、子类到底能继承父类中的哪些内容?

        父类中的构造方法:无论是不是私有的,子类都无法继承,因为违背了构造方法必须与类名一致的原则。

        父类中的成员变量:无论父类的成员变量是不是私有的,子类都能继承,但是父类私有的成员变量,子类无法直接使用,如果必须要使用,父类就必须要提供setXxx和getXxx方法。

        父类中的成员方法:子类可以继承父类的虚方法表中的成员方法,子类无法继承父类java继承基础教学中不在虚方法表中的成员方法。

二、虚方法表

        虚方法表:将类中可能经常被使用的方法抽取到虚方法表中,抽取到虚方法表中的方法要满足以下条件:非private、非static和非final修饰。

        如下图所示:C类将自己的虚方法表交给子类B,子类B会根据虚方法表中的内容,在C的基础上再添加自己类中的虚方法;A类同上。

        子类在调用方法时,会查看方法区中,该方法是不是虚方法。并且是先在子类的虚方法表中查找,子类中没有找到,再去父类的虚方法表中查找,以此类推。

三、静态方法与虚方法表

先看一段代码:

 
讯享网 

        被static修饰的方法在 Java 中的行为与实例方法有显著不同。以下是关于静态方法继承的详细解释: 

1.静态方法与虚方法表
        虚方法表(Virtual Method Table, VMT) 是用于支持动态绑定的结构,它仅包含实例方法(非静态方法)。
        静态方法属于类本身,而不是类的实例,因此它们不需要虚方法表来支持多态性。静态方法的调用是在编译时解析的,基于类的类型,而不是对象的类型。


2.静态方法的继承
        可以被继承:静态方法虽然不在虚方法表中,但仍然可以被子类继承。这是因为静态方法与类的定义相关联,而不是与实例的状态相关联。
        当一个子类继承父类时,子类会自动拥有父类的静态方法。子类可以通过类名调用父类的静态方法,或者直接调用(如果没有同名的静态方法)。

3.静态方法的隐藏
        如果子类定义了一个与父类同名的静态方法,那么子类的方法会隐藏父类的方法,而不是重写。这种情况下,父类和子类都有各自的方法,但它们不在同一个虚方法表中。

  • 被 static 修饰的方法虽然不在虚方法表中,但仍然可以被继承,因为它们与类的结构和定义相关。
  • 由于静态方法不涉及多态性和运行时绑定,因此它们的调用基于编译时的解析,而不是通过虚方法表。
  • 这使得静态方法的使用具有清晰的类级别的特性,避免了运行时的开销,同时保持了静态方法的可访问性。 

四、继承内存图

        Fu类和Zi类因为是继承的关系,在方法区中加载的时候,Fu类和Zi类都会被加载。并且会在堆中开辟一块空间,这块空间分成两份,一份存放父类的属性,另一份存放子类的属性。在对属性进行赋值时,先去子类中寻找是否有该属性,子类中没有找到,再去父类中寻找,找到为止。

五、继承中:成员变量和成员方法的访问特点

(一)成员变量的访问特点

就近原则:谁离得近就用谁

(二)成员方法的访问特点

1.this与super访问成员方法的特点

this是先在本类中找,本类没有再去父类中找;

super是先在父类中找,父类中没有再去更高一层的父类中找。

2.方法重写

2.1方法重写的本质:子类覆盖了从父类继承的虚方法表里的方法。

调用时是在虚方法表中查找。

2.2方法重写注意事项和要求

        当父类中的方法不能满足需求,就需要进行重写。重写有的时候仍然会用到父类,使用super.方法体+子类新增的代码即可;当不需要父类的内容时,直接写子类新增的代码即可。

  1. 重写方法的名称、形参列表必须与父类中的一致。
  2. 子类重写父类方法时,访问权限子类必须大于等于父类
  3. 子类重写父类方法时,返回值类型子类必须小于等于父类
  4. 建议:重写的方法尽量和父类保持一致
  5. 只有被添加到虚方法表中的方法才能被重写 

六、继承中:构造方法的访问特点

  • 特点1:父类中的构造方法不会被子类继承。
  • 特点2:子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。

原因:

  • 子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据
  • 子类初始化之前,一定要调用父类构造方法,先完成父类数据空间的初始化。

子类调用父类构造方法的方式:

  • 子类构造方法的第一行语句默认都是:super(),不写也存在,且必须在有效代码的第一行
  • 如果想调用父类有参构造,必须手动写super进行调用

七、super与this关键字

我们知道,在构造方法中,会默认有一个super(),调用父类的无参构造。现在有一个需求:在创建对象的时候,调用无参构造时,直接给某个属性赋值。

代码如下:

讯享网

小细节:

        上述代码中,在无参构造中可以用this(),调用本类的有参构造,并给出默认值;

小讯
上一篇 2025-01-02 20:58
下一篇 2024-12-27 11:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/4385.html