一文读懂类的继承和多态 - 极悦
首页 课程 师资 教程 报名

一文读懂类的继承和多态

  • 2022-10-25 09:45:27
  • 686次 极悦

什么是继承?

首先我们来举例说明一下Java继承定义,想象一下设计一个类来创建Car丰田、奔驰、劳斯莱斯等对象。所有汽车对象都具有相同的属性和行为。例如,所有汽车都可以移动(行驶)、鸣喇叭、加速,并且它们都有名称和发动机编号。可以使用具有汽车所有属性和行为的通用汽车类(超类)来对所有汽车对象进行建模,而不是单独创建这些类。然后其他类继承或基于超类属性和方法创建。简而言之,继承使您可以基于其他类构建类并避免重复和重复代码。下面是一些代码来解释上面的插图:

// Declare a car superclass
public class Car {
    private int speed;
    private String name;
    private String color;
    private int enginePower;
    public Car() {
    }
    public void accelerate() {
        System.out.println("The car is accelerating…");
    }
    public void setSpeed(int speed) {
        System.out.println("The car is " + speed);
    }
    public int getSpeed() {
        return speed;
    }
}
// Declare a sub car class
public class Toyota extends Car {
    private int registrationNumber;
    private int engineNumber;
    public Toyota() {
        // Toyota constructor calling the constructor of the superclass
        super();
    }
}

关键字extends暗示Toyota该类继承自该类并且是该类的子Car类。Toyota 类既有类的属性和方法,也有Car它自己的。这是继承的核心原则;它支持代码可重用性的概念。下面的代码片段显示了Toyota对象如何访问超类中的属性和方法Car:

public class Main {
    public static void main(String[] args) {
        // This is the setSpeed() and accelerate() method in the Car class being accessed by the Toyota object.
        Toyota myToyota = new Toyota();
        myToyota.setSpeed(3);
        myToyota.accelerate();
    }
}

可以说子类是超类的特殊版本。作为一种普遍接受的 Java 编程方法,在我们创建对象之前,必须将其声明为给定类型:对象是其实例的类。继承通过多态替换原则改变了这一点。多态替换原则指出,在表达式中需要给定类型的对象的任何地方,都可以用作为给定类型的子类的对象来替换它。下面是一个代码片段来说明多态替换原理:

Car myToyota = new Car();
// An object of type Car is assigned to a variable of type Car or
Car myToyota1 = new Toyota();

类型的对象Toyota被分配给类型的变量Car。这是可能的,因为丰田是 Car 的子类或后代。不幸的是,多态替换原则不能在相反的方向上成立。因此,不能使用汽车对象代替丰田对象。例如,下面的代码会导致编译错误:

Toyota myToyota = new Car();
/* Every Toyota is a Car but not every car is a Toyota */

现在是研究继承类型的时候了,但在此之前,让我明确一点。super当超类中的方法在子类中被覆盖时,可以使用后跟句点的关键字在基类中访问超类方法。下面的代码片段说明了这一点:

public class Toyota extends Car{
    public void accelerate() {
        super.accelerate();
        System.out.println("Toyota is accelerating");
    }
}

多态性及其实现

顾名思义,多态性是采取多种形式或形状的能力。多态性是一个面向对象的编程概念,它允许您直接或间接地处理共享相同超类的对象,就好像它们是超类的对象一样。例如,我们在继承中继承超类的方法,而多态则以不同的形式使用这些方法。

假设我们创建了一个模仿动物运动的程序。例如,类Dog、Fish、Bird和Snake,尽管它们都实现move了超类 animal 中的方法,但它们的移动方式不同。下面的代码片段对上面的语句进行了生动的说明:

public class Animal {
    public void animalMove() {
        System.out.println("Animal move");
    }
}
public class Dog extends Animal{
    public void animalMove() {
        System.out.println("Dog is running");
    }
}
public class Fish extends Animal{
    public void animalMove() {
        System.out.println("Fish is swimming");
    }
}
public class Bird extends Animal{
    public void animalMove() {
        System.out.println("Bird is flying");
    }
}
public class Snake extends Animal{
    public void animalMove() {
        System.out.println("Snake is crawling");
    }
}

为了测试上面的代码是否应用了多态,我们用primary方法来测试一下。

public static void main(String[] args) {
    Animal animal = new Animal();
    animal.animalMove();
    Animal dog = new Dog();
    dog.animalMove();
    Animal fish = new Fish();
    fish.animalMove();
    Animal bird = new Bird();
    bird.animalMove();
    Animal snake = new Snake();
    snake.animalMove();
}

当我们运行这个应用程序时,以下将在我们的控制台上打印出来:

Animal move
Dog is running
Fish is swimming
Bird is flying
Snake is crawling

继承和多态的区别

在继承中,我们创建了继承超类特征的新类,而多态性决定了要执行的方法形式。继承适用于类,而多态适用于方法。

多态性和继承的重要性

以下是为什么多态性和继承是基本 OOP 概念的几个原因:

继承鼓励类层次结构

继承鼓励代码可重用性

多态性使简单

多态性鼓励代码可扩展性

以上就是关于“一文读懂类的继承和多态”的介绍,大家如果想了解更多相关知识,不妨来关注一下本站的面向对象设计原则,里面还有更丰富的知识等着大家去学习,希望对大家能够有所帮助哦。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交