Java继承:代码复用与多态的核心,| 记录

🧠 什么是继承?

继承 是一种子类自动拥有父类成员(变量和方法)的机制,是 Java 中实现代码复用多态的基础。

在 Java 中,使用 extends 关键字实现继承。


🧱 基本语法

class 父类 {
    // 属性、方法
}

class 子类 extends 父类 {
    // 子类自己的属性和方法
}


📦 示例:一个基础的继承案例

// 父类
public class Animal {
    String name;

    public void eat() {
        System.out.println(name + " is eating.");
    }
}

// 子类
public class Dog extends Animal {
    public void bark() {
        System.out.println(name + " is barking.");
    }
}

// 测试类
public class Main {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.name = "Buddy";
        d.eat();  // 从父类继承的方法
        d.bark(); // 子类自己的方法
    }
}

🧾 输出:

Buddy is eating.
Buddy is barking.

✅ 子类 Dog 继承了 Animalnameeat() 方法,同时也可以扩展自己的方法。


🎯 使用继承的典型场景

1. 代码复用

多个子类可以共享父类中通用的字段和方法,减少重复代码。

class Person {
    String name;
    void introduce() {
        System.out.println("My name is " + name);
    }
}

class Student extends Person {
    void study() {
        System.out.println(name + " is studying.");
    }
}

2. 子类扩展/增强行为

子类可以添加自己的成员或重写父类的方法来扩展功能

3. 多态实现基础

通过继承,Java 支持「父类引用指向子类对象」,这是多态的核心前提。


🔁 方法重写(Override)

子类可以重写父类的方法以实现不同的行为。

class Animal {
    public void speak() {
        System.out.println("Animal speaks");
    }
}

class Cat extends Animal {
    @Override
    public void speak() {
        System.out.println("Meow~");
    }
}

注意事项:

  • 方法签名必须一致

  • 返回类型相同或为其子类型

  • 建议加 @Override 注解,避免拼写错误或误用


🛡️ 继承中的访问控制

修饰符同类同包子(孙)类外部
public
protected
默认(无修饰)
private

private 成员不能被继承访问,但可以通过 protected 提供对子类开放的访问权限。


📌 构造函数与继承

子类不会继承父类的构造函数,但可以通过 super() 显式调用。

class Animal {
    public Animal(String name) {
        System.out.println("Animal: " + name);
    }
}

class Dog extends Animal {
    public Dog() {
        super("Dog"); // 必须调用父类构造器
        System.out.println("Dog constructor called");
    }
}

⚠️ 常见误区与易错点

❌ 子类不能访问父类的 private 成员

class A {
    private int value = 10;
}

class B extends A {
    void show() {
        // System.out.println(value); // 错误:value 是 private 的
    }
}

✅ 解决:使用 protected 或 getter 方法访问。


❌ 子类不能继承多个父类(Java 不支持多继承)

// ❌ 错误示例(Java 不支持)
class A {}
class B {}
class C extends A, B {} // 编译错误

✅ 替代方案:使用**接口(interface)**实现多继承行为(见后续博客)


❌ 构造函数中必须手动调用父类构造器(如无默认构造函数)


class A {
    public A(String msg) {}
}

class B extends A {
    // ❌ 错误:没有调用 super(String)
    public B() {
        // super(); // 编译失败
    }
}


✅ 实战建议:什么时候使用继承?

使用场景是否建议继承原因
多个类有相同字段/行为代码复用
子类是父类的 “is-a” 类型合理建模(如 Dog is an Animal)
需要扩展通用逻辑增强父类能力
类功能不一致但代码想复用建议使用组合(Has-a)代替继承


📚 总结一句话

Java 的继承是一种 “是一个(is-a)” 的关系,它让我们能以最小代价扩展功能、复用代码、实现多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下的DeppBing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值