Java面向对象编程:抽象类与接口的区别示例

原创 偏执的太偏执、 2024-09-15 16:15 214阅读 0赞

在Java中,抽象类和接口是两种实现面向对象编程的方法。它们的主要区别如下:

  1. 定义性

    • 抽象类:可以包含属性(字段)和方法(包括抽象方法和普通方法)。
    • 接口:只包含抽象方法,没有属性和实现方法。
  2. 多继承

    • 抽象类:单继承,一个子类只能继承一个抽象类。
    • 接口:多继承,多个接口可以被同一个类继承。
  3. 实现性

    • 抽象类:子类必须实现抽象类的所有抽象方法。
    • 接口:类不需要实现接口中的所有方法,只需声明为实现了这个接口即可。

示例代码(基于接口的多继承):

  1. // 定义一个接口
  2. interface Animal {
  3. void eat();
  4. void sleep();
  5. }
  6. // 定义两个实现Animal接口的抽象类
  7. abstract class Dog implements Animal {
  8. @Override
  9. public void eat() {
  10. System.out.println("Dog eats a bone.");
  11. }
  12. @Override
  13. public void sleep() {
  14. System.out.println("Dog sleeps peacefully.");
  15. }
  16. }
  17. abstract class Cat implements Animal {
  18. @Override
  19. public void eat() {
  20. System.out.println("Cat eats a fish.");
  21. }
  22. @Override
  23. public void sleep() {
  24. System.out.println("Cat sleeps curled up.");
  25. }
  26. }
  27. // 实现Dog和Cat接口的类
  28. class Puppy extends Dog {
  29. @Override
  30. public void eat() {
  31. System.out.println("Puppy chews a toy bone.");
  32. }
  33. }
  34. public class Main {
  35. public static void main(String[] args) {
  36. // 创建并显示狗和猫的食物习惯
  37. Dog dog = new Puppy(); // 创建 puppy 类的实例
  38. Animal cat = new Cat();
  39. animalList = new ArrayList<>(Arrays.asList(dog, cat)))); // 创建一个包含 dog 和 cat 的 List
  40. for (Animal animal : animalList) {
  41. System.out.println(animal.getClass().getName() + "'s eating habits:");
  42. animal.eat(); // 调用动物的食物习惯方法
  43. }
  44. }
  45. }

这个示例中,我们定义了一个接口Animal以及两个实现此接口的抽象类DogCat。然后我们创建了Puppy子类来继承Dog接口。

main方法中,我们通过一个包含DogCat对象的列表来管理这些动物。然后遍历这个列表,调用每个动物的食物习惯方法并显示结果。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,214人围观)

还没有评论,来说两句吧...

相关阅读