Java 继承之应用技巧

Java 继承的基本概念

继承是面向对象编程的核心特性之一,允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以复用父类的代码,同时扩展或修改其行为。

class Animal {
    void eat() {
        System.out.println("Animal is eating");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("Dog is barking");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();  // 继承自Animal
        dog.bark(); // Dog自身的方法
    }
}

方法重写(Override)

子类可以重写父类的方法以实现不同的行为。使用 @Override 注解确保方法正确重写。

class Animal {
    void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("Cat meows");
    }
}

public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.makeSound(); // 输出: Cat meows
    }
}

使用 super 关键字

super 用于调用父类的构造方法、方法或属性,避免直接复制父类代码。

class Vehicle {
    int speed;
    Vehicle(int speed) {
        this.speed = speed;
    }
}

class Car extends Vehicle {
    Car(int speed) {
        super(speed); // 调用父类构造方法
    }
    void display() {
        System.out.println("Speed: " + super.speed); // 访问父类属性
    }
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car(120);
        car.display(); // 输出: Speed: 120
    }
}

继承中的多态

多态允许父类引用指向子类对象,实现动态绑定。

class Shape {
    void draw() {
        System.out.println("Drawing a shape");
    }
}

class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a circle");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape shape = new Circle(); // 父类引用指向子类对象
        shape.draw(); // 输出: Drawing a circle
    }
}

抽象类与继承

抽象类定义通用行为,子类必须实现抽象方法。

abstract class Bird {
    abstract void fly();
}

class Eagle extends Bird {
    @Override
    void fly() {
        System.out.println("Eagle flies high");
    }
}

public class Main {
    public static void main(String[] args) {
        Eagle eagle = new Eagle();
        eagle.fly(); // 输出: Eagle flies high
    }
}

继承与接口结合

类可以继承一个父类并实现多个接口,实现多重行为。

interface Swimmable {
    void swim();
}

class Fish extends Animal implements Swimmable {
    @Override
    public void swim() {
        System.out.println("Fish swims");
    }
}

public class Main {
    public static void main(String[] args) {
        Fish fish = new Fish();
        fish.swim(); // 输出: Fish swims
    }
}

避免继承滥用

继承适用于“is-a”关系,组合(Composition)更适合“has-a”关系。

class Engine {
    void start() {
        System.out.println("Engine starts");
    }
}

class Car {
    private Engine engine; // 使用组合而非继承
    Car() {
        engine = new Engine();
    }
    void start() {
        engine.start();
    }
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car();
        car.start(); // 输出: Engine starts
    }
}

通过合理使用继承、多态和抽象,可以构建灵活且可维护的代码结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值