08-01 Java语言基础(多态)
发布日期:2021-05-06 23:59:21 浏览次数:28 分类:精选文章

本文共 1618 字,大约阅读时间需要 5 分钟。

多态是面向对象编程中一个核心概念,它描述了事物在不同情境下可以表现出不同的形态。简单来说,多态就像人类的适应能力,不同的环境下我们会有不同的表现。

多态的前提

多态的实现需要以下几个关键条件:

  • 继承关系:子类必须继承父类才能实现多态。例如,Cat类必须继承Animal类。
  • 方法重写:子类对父类的方法进行重写(override),这意味着在运行时会调用子类的具体实现。
  • 父类引用指向子类对象:使用父类引用(如Animal a = new Cat()),在运行时会调用子类的方法。
  • 代码实现

    以下是一个实现多态的简单例子:

    public class Test11 {
    public static void main(String[] args) {
    Animal a = new Cat(); // 父类引用指向子类对象
    System.out.println(a.num); // 编译看左边(父类),运行看左边(父类)
    a.eat(); // 编译看左边(父类),运行看右边(子类)
    }
    }
    class Animal {
    int num = 10; // 父类属性,所有子类都会继承
    public void eat() { // 父类方法
    System.out.println("动物吃饭");
    }
    }
    class Cat extends Animal {
    int num = 20; // 子类属性,覆盖父类属性
    @Override
    public void eat() { // 方法重写,编译看父类,运行看子类
    System.out.println("猫吃鱼");
    }
    }

    成员变量和成员方法

  • 成员变量

    • 编译时看左边(父类),如果父类没有这个变量,编译会报错。
    • 运行时看左边(父类),如果子类没有重写这个变量,会使用父类的值。
  • 成员方法

    • 编译时看左边(父类),如果父类没有这个方法,编译会报错。
    • 运行时看右边(子类),如果子类重写了这个方法,会调用子类的方法。
  • 案例:超人的故事

    public class Demo3_SuperMan {
    public static void main(String[] args) {
    Person P = new SuperMan();
    P.business(); // 调用子类的方法
    System.out.println(P.name); // 输出子类的属性
    }
    }
    class Person {
    String name = "John"; // 父类属性
    public void business() { // 父类方法
    System.out.println("谈生意");
    }
    }
    class SuperMan extends Person {
    String name = "superMan"; // 子类属性,覆盖父类属性
    public void business() { // 方法重写,输出子类特定的内容
    System.out.println("谈几十个亿的大单子");
    }
    public void fly() { // 新添加的方法
    System.out.println("I believe I can fly");
    }
    }

    这个案例展示了多态的实际应用。SuperMan类继承了Person类,并对business方法进行了重写,表现出不同于普通人的业务能力。此外,SuperMan类还引入了一个新的方法fly(),展示了超人的特殊能力。

    上一篇:08-02 Java语言基础(多态中向上转型和向下转型、多态的好处和弊端)
    下一篇:07-07 Java语言基础(final关键字修饰类、方法及变量)

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月13日 10时13分11秒