Java中的继承及相关概念

在 Java 中,继承是一种允许一个类继承另一个类的特性。通过继承,子类可以获取父类的属性和方法,以下是相关知识

一、继承的核心概念

1.继承的语法

  • Java 中的继承通过 extends 关键字实现,基本语法如下:

class ParentClass {
    // 父类代码
}

class ChildClass extends ParentClass {
    // 子类代码
}
  • 子类会自动继承父类的非私有属性和方法

2.方法的继承,重载与重写

  • 在继承中,子类可以继承父类中的方法和属性。例如,在 BBB.java 中,BBB 类继承了 AAA 类的 testA 方法(通过 super.testA() 调用) 文件内容在下方

  • 子类也可以重写父类的方法。在 BBB.java 中,BBB 类重写了父类的 testA 方法,使其具有不同的实现

  • 一个类下面可以有重名的方法,只要传参不一样就可以,也就是传参的类型或者数量不相同就可以在里面执行不同的功能,这就是方法的重载

3.构造器的调用

  • 子类在创建对象时,会自动调用父类的无参构造器(如果父类有无参构造器)。如果父类没有无参构造器,则子类需要显式调用父类的带参构造器,如 BBB.java 中的 super(name)

4.继承层次

  • Java 只支持单继承,即一个子类只能继承一个父类。这是为了避免多重继承可能带来的复杂性问题,如 “菱形继承” 问题(Diamond Problem)

  • 例如,BBB.java 只能继承自 AAA.java,不能同时继承多个父类

二、相关代码示例及分析

1. 示例:AAA.java

package com.qcby;

public class AAA {
    public void testA() {
        System.out.println("该方法当中有很多逻辑运算----》AAA");
    }

    public AAA(String name) {
        // 父类带参构造器
    }
}
  • AAA 类定义了一个方法 testA 和一个带参构造器

2. 示例:BBB.java

package com.qcby;

public class BBB extends AAA {
    public void testA() {
        System.out.println("该方法当中有很多逻辑运算----》BBB");
    }

    public void name() {
        super.testA();   // 调用父类的方法
        testA();         // 调用子类自己的方法
    }

    public BBB(String name) {
        super(name); // 调用父类的带参构造器
    }
}
  • BBB 类继承了 AAA 类,并重写了 testA 方法

  • name 方法中,通过 super.testA() 调用了父类的 testA 方法,展示了如何在子类中调用父类的方法

  • 子类的构造器调用了父类的 super(name),确保父类的初始化

3. 示例:Test.java(继承测试)

package com.qcby;

public class Test {
    public static void main(String[] args) {
        BBB bbb = new BBB("Example");
        bbb.name(); // 输出:
        // 该方法当中有很多逻辑运算----》AAA
        // 该方法当中有很多逻辑运算----》BBB
    }
}
  • main 方法中,创建了 BBB 类的对象,并调用了 name 方法,演示了继承和方法调用的过程

三、静态初始化与构造函数调用顺序

1. 示例代码:Demo.java

package stack;

public class Demo {
    public Demo(String aa) {
        System.out.println("====" + aa);
    }

    static {
        System.out.println("11");
    }

    public static Demo demo = new Demo("+++");

    static {
        System.out.println("22");
    }

    public static void main(String[] args) {
        Demo demo = new Demo("----");
    }
}

2. 运行结果

11
11
===+
22
===-

3. 分析

  • 静态块的执行顺序:静态块在类加载时执行,且按照代码中出现的顺序依次执行

    • Demo 类中,有两个静态块和一个静态变量初始化。静态块的执行顺序是:

      • 首先执行第一个静态块(System.out.println("11");

      • 然后初始化静态变量 demo = new Demo("+++");,这会触发 Demo 类的构造函数执行

      • 接着执行第二个静态块(System.out.println("22");

  • 构造函数的调用顺序:构造函数在对象创建时调用。在 main 方法中,调用 new Demo("----"); 时:

    • 首先执行 Demo 类的构造函数,输出 ====----

4. 总结

  • 静态块用于类的初始化,执行顺序按照代码中的位置顺序。

  • 构造函数用于对象的初始化,在创建对象时执行。

  • 类加载过程中,静态块和静态变量初始化的顺序会影响程序的输出。

四、关键知识点总结

概念说明
继承语法使用 extends 关键字实现,子类继承父类的非私有属性和方法。
方法重写子类可以重写父类的方法,方法名、参数列表必须相同,实现不同。
构造器调用子类创建对象时,需调用父类的构造器(super)初始化父类成员。
Java 单继承特性一个子类只能继承一个父类,避免多重继承的复杂性。
静态块与构造函数静态块用于类初始化,按代码顺序执行;构造函数用于对象初始化,在对象创建时调用。

五、实例代码与运行结果

1. 继承测试(Test.java)

package com.qcby;

public class Test {
    public static void main(String[] args) {
        BBB bbb = new BBB("重写");
        bbb.name();
        bbb.testA();
        bbb.run();
        bbb.run("方法重载");
    }
}

2. 运行结果

该方法当中有很多逻辑运算----》AAA
该方法当中有很多逻辑运算----》BBB
该方法当中有很多逻辑运算----》BBB
该方法当中有很多逻辑运算----→BBB

3. 分析

  • 调用 name 方法时:

    • 先通过 super.testA() 调用父类的 testA 方法。

    • 再调用子类的 testA 方法。

  • 调用 run 方法时,展示了方法重载的特性。

六、总结

  • 继承是 Java 中面向对象编程的重要特性,允许我们扩展类的功能,实现代码复用。通过继承,子类可以获取父类的属性和方法,并在此基础上添加自己的特性

  • super 关键字 在继承中扮演了重要角色,它可以用来调用父类的构造器、方法和属性

  • 注意 Java 的单继承特性,避免过度使用继承,以保持代码的清晰性和可维护性

  • 方法重载和重写 是继承机制中的常见概念,理解它们的区别和使用场景对于编写高质量的 Java 代码至关重要

  • 静态块和构造函数的调用顺序 在类和对象的初始化过程中起着关键作用,需要根据实际需求合理安排代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值