对Java多态的理解

多态的定义

同一个行为发生在不同的对象上,产生不同结果的能力

使用多态的好处

  • 易于扩展
  • 简化调用
  • 可替换

多态存在的前提

  • 继承
  • 子父类中方法的重写
  • 父类引用指向子类对象

代码用例

public class TestPolymorphism {
    public static void main(String[] args) {
        Animal a_c = new Cat();
        a_c.eat();//Override:cat eat!!
        a_c.sleep();    Animal.sleep();//static animal sleep
        System.out.println(a_c.num);//num in animal
        System.out.println(a_c.age);//static age in animal
        /**
         * 总结:
         * 该种方式下的多态,只有非静态成员方法(eat方法),才会调用对应子类(Cat类)重写的方法;其他成员变量等都会调用到父类的内容
         */
//        int a=a_c.sleepInCat();//多态的弊端:父类 不能使用子类特有的成员属性和子类特有的成员方法;但可以强转到对应的子类
        Cat cat = (Cat) a_c;
        int a=cat.sleepInCat();//Overloading:cat sleep!! have return
        System.out.println(cat.num);//num in cat!
    }
}

class Animal {
    String num = "num in animal";
    static String age = "static age in animal";

    public void eat() {//当子类与父类同名方法返回值不一样时,不会构成重写(Override)
        System.out.println("animal eat");
    }

    public static Integer sleep() {
        System.out.println("static animal sleep");
        return 1;
    }
}

class Cat extends Animal {
    String num = "num in cat!";
    static String age = "static age in cat!";

    @Override
    public void eat() {//当子类与父类同名方法返回值不一样时,不会构成重写(Override)
        System.out.println("Override:cat eat!!");
    }
    public static Integer sleep() {//当两个同名方法仅仅只是返回类型不同时,不会构成重载(Overloading)
        System.out.println("static cat sleep!");
        return 1;
    }
/*----------------------------------------------------------------------------------------------*/
    public String sleepInCat(int a) {//当两个相同方法仅仅只是返回类型不同时,不会构成重载(Overloading)
        System.out.println("Overloading:cat sleep!! have return");
        return "s";
    }
    public int sleepInCat(/*int a*/) {//当两个相同方法仅仅只是返回类型不同时,不会构成重载(Overloading)
        System.out.println("Overloading:cat sleep!! have return");
        return 1;
    }

}

  • 注意重载(Overloading)与重写(Override)的区别   可参考
  • 父类中的静态方法或静态成员变量,不会调用到子类,因为不实列化也可以调用。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值