理解Java特性:多态

多态

java的特性里面绕不过去的一个概念 就是 多态,多态是继承的基础上一个更高级的特性。
说到继承我们都理解 就是子类继承父类 ,子类拥有父类的一起公有资源 可以在这个基础上添加 修改 重写。
那么什么是多态呢?

先看个例子:

public class Animal {

    @Setter
    @Getter
    private String name = "动物";

    @Setter
    @Getter
    private int age;

    @Setter
    @Getter
    private String color;


    public void show(){
        System.out.println("这是一个动物");
    }

}

public class Dog extends Animal{

    //狗的品种
    @Setter
    @Getter
    private String typeDog;

    @Override
    public void show() {
        System.out.println("这是一只狗 汪汪汪");
    }
}

public class Cat extends Animal{
    //猫的品种
    @Setter
    @Getter
    private String typeCat;

    @Override
    public void show() {
        System.out.println("这是一只猫 喵喵喵");
    }
}

我们先看个动物类 然后cat 和dog 分别继承于它 并重写了show方法 此外他们俩还单独各加了一个 品种名称属性。
然后我们来试一下 所谓多态 简单一句话 就是子类的对象 赋值给父类的引用

    Animal a1 = new Dog();
public class InheritanceDemo {
    public static void main(String[] args) {

        Animal a1 = new Dog();
        System.out.println(a1.getName());
        show(a1);

        Animal a2 = new Cat();
        System.out.println(a2.getName());
        show(a2);
    }
    public static void show(Animal animal){
        animal.show();
    }
}

那么当这个 a1 去调用 show方法的时候: 他就会去调用子类的方法 而不是自己的方法。 而a1去调用属性name的时候 神奇的是他依然在调用自己的属性:

动物
这是一只狗 汪汪汪
动物
这是一只猫 喵喵喵

Process finished with exit code 0

这样的好处在于 你可以解耦 继承关系中的方法调用 比如这个方法 show(Animal animal) 参数是 animal, 你可以传任何继承animal对象的多态引用 它就会自动去调用子类对象的方法 , 是不是很方便!

我们总结一下多态的好处:

  • 灵活性:多态性允许使用父类类型的引用变量来引用子类对象,从而使代码更加灵活,可以适应不同类型的对象。这样一来,程序在运行时可以根据实际对象的类型来调用相应的方法,而不需要关心具体的实现细节。
  • 可扩展性:通过多态性,可以轻松地添加新的子类,并在不修改现有代码的情况下使用这些新类。这种灵活性使得系统更容易扩展,更适应变化。
  • 可维护性:通过多态性,可以将相同的代码应用于不同类型的对象,这样可以减少代码的重复,提高代码的可维护性。如果需要修改某个行为,只需要修改父类或接口中的方法,而无需修改所有的子类。

同理

除了继承 接口也可以多态!

interface Animal {
    void sound();
}

class Dog implements Animal {
    public void sound() {
        System.out.println("Dog barks");
    }
}

class Cat implements Animal {
    public void sound() {
        System.out.println("Cat meows");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.sound(); // 输出 "Dog barks"
        animal2.sound(); // 输出 "Cat meows"
    }
}


对新手来说 多态里面有几点注意的 !

  • 首先就是上面那个例子
    Animal a1 = new Dog();
    System.out.println(a1.getName());
    调用方法会多态 调用属性不会多态 属性还是按照父类属性的值为准

  • 必须是重写父类的方法才能多态 如果你在子类写一个父类里面没有的新方法 你去多态调用就会报错

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值