JAVA 多态-成员方法

通过父类的引用,调用子类的方法

对象名.方法名();

当使用 父类引用 调用方法时,如果父类有该方法,而 子类没有,就调用父类的方法

例子:

class Wangjianlin{
    public void money(){
        System.out.println("王健林赚钱");
    }
}

class Wangsicong extends Wangjianlin{
}

测试:

Wangjianlin wang = new Wangsicong();
wang.money();

执行结果:

王健林赚钱

当使用 父类引用 调用方法时,如果 子类重写父类的方法,就调用子类的方法

class Wangjianlin{
    public void money(){
        System.out.println("王健林赚钱");
    }
}

class Wangsicong extends Wangjianlin{
    public void money(){
        System.out.println("王思聪赚钱");
    }
}

测试:

Wangjianlin wang = new Wangsicong();
wang.money();

执行结果:

王思聪赚钱

当使用 父类引用 调用方法时,如果子类有该方法,父类没有,则调用报错

class Wangjianlin{
    public void money(){
        System.out.println("王健林赚钱");
    }
}

class Wangsicong extends Wangjianlin{
    public void money(){
        System.out.println("王思聪赚钱");
    }
    public void buy(){
        System.out.println("王思聪买买买");
    }
}

测试:

Wangjianlin wang = new Wangsicong();
//wang.buy();//报错,不能向下查找

喂养宠物例子

例子:

class abstract Animal{
    public void eat();
}

class Dog extends Animal{
    public void eat(){
        System.out.println("Dog 吃饭");
    }
}

class Cat extends Animal{
    public void eat(){
        System.out.println("Cat 吃饭");
    }
}

测试

public class Test {


    public static void feed(Cat a){
        a.eat();
    }

    public static void feed(Dog a){
        a.eat();
    }

    public static void main(String[] args) {
        Cat tom=new Cat();
        feed(tom);

        Dog erha=new Dog();
        feed(erha);

    }
}

多态的好处

实际开发的过程中,父类类型作为方法形参,传递子类对象给方法,进行方法的调用

class Test{
    //喂食,此处就用到了多态。否则定义了Dog,那么Cat对象无法传递,反之亦然
    public static void feed(Animal a){
        System.out.println("Person 喂食");
        a.eat();
    }


    public static void main(String[] args) {
        Cat tom=new Cat();
        feed(tom);

        Dog erha=new Dog();
        feed(erha);

    }
}

feed()方法形参,就用到了多态。如果定义了Dog,那么Cat对象无法传递,反之亦然


原文出处:https://malaoshi.top/show_1IX3O6pxEiYF.html