作者:张梦蒙4428 | 来源:互联网 | 2023-01-27 17:50
假设我有一个Animal类,我想为每种动物设置不同的类和功能.有两种方法可以做到这一点:
方法覆盖继承:
public class Animal {
public void sound() {}
}
public class Dog extends Animal {
public void sound() {
System.out.println("bark");
}
}
public static void main(String[] args) {
Animal dog = new Dog();
dog.sound();
}
通过扩展Animal
抽象类:
abstract public class Animal {
abstract public void sound();
}
public class Dog extends Animal {
public void sound() {
System.out.println("bark");
}
}
public static void main(String[] args) {
Dog dog = new Dog();
dog.sound();
}
那么为什么我们一直使用抽象类,当第一种方法完成同样的事情时呢?我理解为什么我们使用接口 - 它建立了一个契约,任何实现它的类都必须具有某些方法和属性.但是,当通过简单的继承实现同样的事情时,抽象类的用途是什么?
1> 小智..:
关于抽象类的一个重要问题 - 它无法实例化.因此,根据您的问题的性质,有时您会想要使用它.
动物实际上是一个很好的例子:
由于没有例子在世界上的动物,但实例的具体只动物.所以 - 你想要一个抽象类Animal
,特定的动物类将扩展它,并实现它的抽象方法.
此外,您可以在抽象类中使用非抽象方法 - 当扩展它的每个类都有共享/共同行为时,您可以使用这些方法.