首先我们来举例说明一下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大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习