多态的使用方法

/*
    多态的前提:
        有继承/实现关系
        有方法重写
        有父类引用指向子类对象

    1.对象多态
        Animal a = new Dog();
        Animal a = new Cat();

        用处:方法的形参定义为父类类型,这个方法便可以接收到该父类的任意子类对象了

    2.行为多态
        a.eat();
        Dog.eat();
        Cat.eat();

        用处:同一个方法,具有多种不同表现形式,或形态的能力
*/
public class PolymorphismTest {
    public static void main(String[] args) {

        useAnimal(new Dog());  //Animal a = new Dog();  //狗吃肉...
        useAnimal(new Cat());  //Animal a = new Cat();  //猫吃鱼...
    }

    public static void useAnimal(Animal a) {
        a.eat();
    }
}

abstract class Animal {
    public abstract void eat();
}

class Dog extends Animal {

    @Override
    public void eat() {
        System.out.println("狗吃肉...");
    }
}

class Cat extends Animal {

    @Override
    public void eat() {
        System.out.println("猫吃鱼...");
    }
}

/*
    多态的成员访问特点:

        1.成员变量:编译看左边(父类),运行看左边(父类)

        2.成员方法:编译看左边(父类),运行看右边(zi类)

            在编译的时候会检查父类中有没有这个方法
                没有:编译错误
                有:编译通过,但是运行的时候,一定会执行子类的方法逻辑

    ------------------------------------------------------------------

     多态创建对象,调用静态成员:

        静态的成员推荐通过类名进行调用
        即使通过对象名调用,也是转化为类名调用

    ------------------------------------------------------------------

     多态的好处:
        提高了程序的扩展性

     多态的弊端:
        不能使用子类的特有成员

*/
public class PolymorphismTest {
    public static void main(String[] args) {
        Fu f = new Zi();
        System.out.println(f.num); //成员变量多态演示  //10
        f.show(); //成员方法多态演示  //Zi...show
        f.print(); //Fu.print(); //多态创建对象,调用静态成员  //Fu...print

        System.out.println("-------------------------");

        Inter i = new InterImpl();
        i.method();  //method...
    }
}

class Fu{
    int num = 10;

    public void show(){
        System.out.println("Fu...show");
    }

    public static void print(){
        System.out.println("Fu...print");
    }
}

class Zi extends Fu{
    int num = 20;

    public void show(){
        System.out.println("Zi...show");
    }

    public static void print(){
        System.out.println("Zi...print");
    }
}

interface Inter{
    void method();
}

class InterImpl implements Inter{

    @Override
    public void method() {
        System.out.println("method...");
    }
}

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值