2.2. 继承与多态

宁睿  金牌会员 | 2023-5-29 23:22:47 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 950|帖子 950|积分 2860

继承和多态是面向对象编程的两个重要概念,它们使得我们可以创建更加通用、可扩展的代码。
2.2.1. 继承

继承是一种创建新类的方式,新类(子类)从现有类(父类)继承属性和方法。子类可以重写或扩展父类的功能。
要创建一个子类,可以使用 extends 关键字:
  1. class SubClassName extends ParentClassName {
  2.     // 子类的成员变量和方法
  3. }
复制代码
示例1:继承
  1. // 父类
  2. class Animal {
  3.     String name;
  4.     int age;
  5.     void sleep() {
  6.         System.out.println(name + " is sleeping.");
  7.     }
  8. }
  9. // 子类
  10. class Dog extends Animal {
  11.     String breed;
  12.     void bark() {
  13.         System.out.println(name + " is barking.");
  14.     }
  15. }
  16. class Main {
  17.     public static void main(String[] args) {
  18.         Dog myDog = new Dog();
  19.         myDog.name = "Buddy";
  20.         myDog.age = 3;
  21.         myDog.breed = "Golden Retriever";
  22.         myDog.bark(); // 子类的方法
  23.         myDog.sleep(); // 继承自父类的方法
  24.     }
  25. }
复制代码
2.2.2. 方法重写(覆盖)

子类可以重写父类的方法,以便在调用子类对象的该方法时使用子类的实现而不是父类的实现。重写方法的返回类型、方法名和参数列表必须与父类相同。
  1. class SubClassName extends ParentClassName {
  2.     @Override // 注解,表明该方法重写了父类的方法,非必须但建议使用
  3.     ReturnType methodName(Parameters) {
  4.         // 子类的实现
  5.     }
  6. }
复制代码
示例2:方法重写
  1. // 父类
  2. class Animal {
  3.     String name;
  4.     int age;
  5.     void sleep() {
  6.         System.out.println(name + " is sleeping.");
  7.     }
  8. }
  9. // 子类
  10. class Dog extends Animal {
  11.     String breed;
  12.     void bark() {
  13.         System.out.println(name + " is barking.");
  14.     }
  15.     @Override
  16.     void sleep() {
  17.         System.out.println(name + " the " + breed + " is sleeping.");
  18.     }
  19. }
  20. class Main {
  21.     public static void main(String[] args) {
  22.         Dog myDog = new Dog();
  23.         myDog.name = "Buddy";
  24.         myDog.age = 3;
  25.         myDog.breed = "Golden Retriever";
  26.         myDog.bark();
  27.         myDog.sleep(); // 调用子类重写的方法
  28.     }
  29. }
复制代码
2.2.3. 多态

多态是一个对象在不同情况下表现出不同的行为。多态是通过父类引用指向子类对象实现的。
  1. ParentClassName objectName = new SubClassName();
复制代码
示例3:多态
  1. // 父类
  2. class Animal {
  3.     String name;
  4.     int age;
  5.     void sleep() {
  6.         System.out.println(name + " is sleeping.");
  7.     }
  8. }
  9. // 子类
  10. class Dog extends Animal {
  11.     String breed;
  12.     void bark() {
  13.         System.out.println(name + " is barking.");
  14.     }
  15.     @Override
  16.     void sleep() {
  17.         System.out.println(name + " the " + breed + " is sleeping.");
  18.     }
  19. }
  20. class Main {
  21.     public static void main(String[] args) {
  22.         // 多态
  23.         Animal myAnimal = new Dog();
  24.         myAnimal.name = "Buddy";
  25.         myAnimal.age = 3;
  26.         myAnimal.sleep(); // 调用子类重写的方法
  27.         // 注意:无法访问子类特有的方法和属性
  28.         // myAnimal.bark(); // 错误
  29.         // myAnimal.breed = "Golden Retriever"; // 错误
  30.     }
  31. }
复制代码
多态的主要优点是代码的可扩展性和维护性。当你需要添加新的子类时,不需要修改使用多态的代码。
2.2.4. 抽象类和接口

抽象类和接口是 Java 中实现多态和代码复用的两种方式。

  • 抽象类:包括抽象方法(没有实现的方法)和具体方法。子类必须实现所有抽象方法。使用 abstract 关键字定义抽象类和抽象方法。
    1. abstract class AbstractClassName {
    2.     // 抽象方法
    3.     abstract ReturnType methodName(Parameters);
    4.     // 具体方法
    5.     ReturnType methodName(Parameters) {
    6.         // 方法实现
    7.     }
    8. }
    9. ```
    复制代码
  • 接口:定义一组方法签名(没有实现的方法)。实现接口的类必须实现所有方法。使用 interface 关键字定义接口。
    1. interface InterfaceName {
    2.     // 方法签名(没有方法体)
    3.     ReturnType methodName(Parameters);
    4. }
    5. ```
    复制代码
示例4:抽象类和接口
  1. // 抽象类
  2. abstract class Animal {
  3.     String name;
  4.     int age;
  5.     abstract void makeSound();
  6.     void sleep() {
  7.         System.out.println(name + " is sleeping.");
  8.     }
  9. }
  10. // 接口
  11. interface Pet {
  12.     void play();
  13. }
  14. // 子类实现抽象类和接口
  15. class Dog extends Animal implements Pet {
  16.     String breed;
  17.     @Override
  18.     void makeSound() {
  19.         System.out.println(name + " is barking.");
  20.     }
  21.     @Override
  22.     public void play() {
  23.         System.out.println(name + " is playing.");
  24.     }
  25. }
  26. class Main {
  27.     public static void main(String[] args) {
  28.         Dog myDog = new Dog();
  29.         myDog.name = "Buddy";
  30.         myDog.age = 3;
  31.         myDog.breed = "Golden Retriever";
  32.         myDog.makeSound(); // 实现抽象类的抽象方法
  33.         myDog.sleep(); // 继承自抽象类的具体方法
  34.         myDog.play(); // 实现接口的方法
  35.     }
  36. }
复制代码
这是关于继承和多态的基本介绍。通过这些概念,你可以创建更加灵活和可扩展的代码。在实际开发中,你会遇到更多复杂和实用的用例,通过多做练习和深入学习,你将更好地掌握这些知识点。


推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表