Java面向对象编程:抽象类与接口的区别示例
在Java中,抽象类和接口是两种实现面向对象编程的方法。它们的主要区别如下:
定义性:
- 抽象类:可以包含属性(字段)和方法(包括抽象方法和普通方法)。
- 接口:只包含抽象方法,没有属性和实现方法。
多继承:
- 抽象类:单继承,一个子类只能继承一个抽象类。
- 接口:多继承,多个接口可以被同一个类继承。
实现性:
- 抽象类:子类必须实现抽象类的所有抽象方法。
- 接口:类不需要实现接口中的所有方法,只需声明为实现了这个接口即可。
示例代码(基于接口的多继承):
// 定义一个接口
interface Animal {
void eat();
void sleep();
}
// 定义两个实现Animal接口的抽象类
abstract class Dog implements Animal {
@Override
public void eat() {
System.out.println("Dog eats a bone.");
}
@Override
public void sleep() {
System.out.println("Dog sleeps peacefully.");
}
}
abstract class Cat implements Animal {
@Override
public void eat() {
System.out.println("Cat eats a fish.");
}
@Override
public void sleep() {
System.out.println("Cat sleeps curled up.");
}
}
// 实现Dog和Cat接口的类
class Puppy extends Dog {
@Override
public void eat() {
System.out.println("Puppy chews a toy bone.");
}
}
public class Main {
public static void main(String[] args) {
// 创建并显示狗和猫的食物习惯
Dog dog = new Puppy(); // 创建 puppy 类的实例
Animal cat = new Cat();
animalList = new ArrayList<>(Arrays.asList(dog, cat)))); // 创建一个包含 dog 和 cat 的 List
for (Animal animal : animalList) {
System.out.println(animal.getClass().getName() + "'s eating habits:");
animal.eat(); // 调用动物的食物习惯方法
}
}
}
这个示例中,我们定义了一个接口Animal
以及两个实现此接口的抽象类Dog
和Cat
。然后我们创建了Puppy
子类来继承Dog
接口。
在main
方法中,我们通过一个包含Dog
和Cat
对象的列表来管理这些动物。然后遍历这个列表,调用每个动物的食物习惯方法并显示结果。
还没有评论,来说两句吧...