黑马程序员_面向对象之多态

本文详细解释了面向对象编程中的多态概念,包括定义、前提条件、好处与弊端,并通过实例演示了如何在Java中实现多态。


------- android培训java培训、期待与您交流! ----------


面向对象之多态

  

定义:某一类事物的多种存在形态。

  如狗是狗,也是动物;水的三种形态;

  体现:父类或接口的引用指向或者接收自己的子类对象;

  好处:多态的存在提高了程序的扩展行和后期维护性,同一个父类的引用可以指挥一批对象做事情。

  前提:A.存在着继承或者实现关系

     B:有方法的重写

     C:父类(接口)引用指向子类(实现)对象

  好处:多态的存在提高了程序的扩展性和后期可维护性

  弊端:虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能,不能预先使用子类中定义的特有功能。

  这个时候要么创建子类对象,调用其特有方法,也可以将父类的引用强转成子类类型,然后赋给子类的引用,然后调用方法。

  如:Fu f = new Zi( );

  Zi zi = (Zi)f;

  Zi.method();

  

  多态中对象调用成员的特点:参考:刘意_DuoTaiDemo3.java,内存图!自己画图理解!

   Fu f = new Zi();

   A:成员变量

   编译看左边,运行看左边(不论是否静态修饰,因为变量不存在重写)

   B:成员方法

  编译时看左边的的引用变量所属的类是否有所调用的成员方法;

  运行时看对象所属的类是否有所调用的成员方法;

   简单而言即:编译看左边,运行看右边(因为方法存在重写)

   C:静态方法

   编译看左边,运行看左边(因为静态方法和变量与对象无关,这样就与多态无关了)

  练习:

class Animal{

public void eat(){

}

}

class Dog extends Animal{

public void eat(){

System.out.println("dog eat");

}

public void play(){

System.out.println("dog play");

}

}

class Cat extends Animal{

public void eat(){

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

}

}

class DuoTaiTest{

public static void main(String[] args) 

{

Animal a = new Cat(); //多态,向上转型

a.eat();//"cat eat"

a = new Dog();

a.eat();//dog eat

//a.play();

Dog d = (Dog)a; //向下转型

d.eat();//dog eat

d.play();//dog play

//ClassCastException

Cat c = (Cat)a;//编译时不报错,因为语法没问题

c.eat();//ClassCastException

}

}

------- android培训java培训、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值