多态(Polymorphism)


多态可理解为事物存在的多种形态

多态的体现:父类引用指向自己的子类对象;父类的引用也可以接收子类的对象(方法中常用)

要实现多态的前提:

1.    要有继承

2.    子类中重写了父类的方法

3.    父类引用指向子类对象

多态的优缺:

优点:多态的出现大大的提高了程序的扩展性

缺点:只能使用父类的引用访问从父类继承的方法

abstract classAnimal{

    int weight = 0;

    public abstract  void eat();

    public abstract  void sleep();

   

}

 

class Cat extendsAnimal{

    int weight = 10;

    String  color = "red";

    @Override

    public void eat() {

        System.out.println("cat eat!");

       

    }

 

    @Override

    public void sleep() {

        System.out.println("cat sleep!");

       

    }

   

    public void catchMouse(){

        System.out .println(" cat catching mouse");

    }

   

}

 

class Dog extendsAnimal{

    int weight = 20;

    String  color = "black";

    @Override

    public void eat() {

        System.out.println("Dog eat!");

    }

 

    @Override

    public void sleep() {

        System.out.println("Dog eat!");

       

    }

    public void houseKeeping(){

        System.out .println(" Dog keeping house!");

    }

   

}

public classTextPolymorphism {

 

   

    public static void main(String[] args) {

        Animala1 = newCat();

        Animala2 = newDog();

        a1.eat();a1.sleep();

        a2.eat();a2.sleep();

        //a1.catchMouse(); //只能使用父类的引用访问从父类继承的方法 编译出错

        //a2.housekeeping();//只能使用父类的引用访问从父类继承的方法编译出错

        show(a1);

        show(a2);

        System.out .println(a1.weight);//结果为0

        System.out .println(a2.weight);//结果为0

        //System.out .println(a1.color);//只能使用父类的引用访问从父类继承的成员变量 编译出错

        //System.out .println(a2.color);//只能使用父类的引用访问从父类继承的成员变量 编译出错

    }

   

    public static void show(Animal a){

        a.eat();

        a.sleep();

    }

 

}

运行结果:

cat eat!

cat sleep!

Dog eat!

Dog eat!

cat eat!

cat sleep!

Dog eat!

Dog eat!

0

0

 

多态中成员函数的特点:在编译时期参阅引用型变量所属的类中是否有被调方法。如果有编译通过,若果没有编译失败。在运行期间,参阅对象所属类中的方法。即看子类有否重写该方法,若重写了实际运行的是子类中重写后的实现,若为重写则运行的是从父类继承而来的那个方法。

总结:成员函数编译时看左边,运行看右边

在多态中成员变量的特点:无论编译运行都看左边(引用变量的所属类)

在多态中静态成员函数的特点:无论编写还是运行都看左边(引用变量的所属类)

 

对象的转型可以向上转型也可以向下:

1.  向上转型:子类à父类(直接转换即可)

2. 向下转型:父类à子类 (要用到关键字 instanceof 必要强制转换 当所转对象此类对象时 会抛出ClassCastException)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值