java面向对象多态定义,Java基础学习:面向对象之多态

21dc9409c3a961157fe535df5f357cd7.png

1、定义

同一个对象,在程序不同时刻的多种运行状态,父类或者接口的引用指向子类对象。举例:水(气态,液态,固态)

2、实现多态的前提条件

1. 必须有继承或者实现关系

2. 必须有方法的重写

3. 父类(接口)的 引用指向子类(实现)的对象

3、多态的好处和弊端:

好处:

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

弊端:

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

4、多态中对象调用成员的特点

java在执行的时候分为两个时期:编译期,运行期

父类 子类 = 子类对象Fu f = new Zi();

A:成员变量:编译期看类型,运行期看类型

编译看左边,运行看左边

B:成员方法:编译期看类型,运行期看对象

编译看左边,运行看右边

C:静态方法:编译期看类型,运行期看类型

编译看左边,运行看左边

5、多态的思想:

指挥同一批对象做事情。举例:带兵打仗,下课等。

6、多态的一个局限性:

只能够访问父类的成员变量和成员方法,不能访问子类自身对象里面的成员变量和成员方法

如何解决这个局限性,可以使用向下转型来操作Son son = (Son) father;

son.love = "爱好";

7、案例:

儿子装爹的故事:小明会教数学这门课,他儿子会教人打游戏。今天小明出门给别人培训数学去了,儿子在家打游戏。正好客户上门请小明去授数学课,开出100元。儿子想着把这笔钱挣下来买皮肤。请客人先回去父亲稍后就到。客户走了之后儿子穿上父亲的衣服,带上父亲的帽子,粘上胡子,装爹出发了。来到客户家教“数学”。实际教的是打游戏,说下节课在教数学。package com.auto.oop;

/**

*父类

*/

public class Father {

String name;

int age;

public void teach(){

System.out.println("教语文");

}

}

package com.auto.oop;

/**

* 小明的儿子

*/

public class Son extends Father{

String love;

@Override

public void teach(){

System.out.println("教打游戏");

}

public void play(){

System.out.println("吃鸡");

}

}

package com.auto.oop;

public class TestSon {

public static void main(String[] args) {

//向上造型

Father father=new Son();//儿子装爹

father.name="小明";

father.age=44;

father.teach();//访问的是父类的方法,但执行的是子类重写后的方法

//向下造型

Son son=(Son) father;//装爹完成之后做回自己

//做回自己的时候可以访问自身的成员变量和成员方法

son.love="游戏";

son.play();

}

}

小明儿子装爹上完一节课之后回家了,脱下外套和帽子,拿下胡子,做回自己,拿着挣的100元买装备。

备注:向下造型的时候需要注意转换的类型是否是需要的类型,可能会导致类型转换异常

可以通过instanceof关键字来避免类型转换异常

instanceof关键字作用:判断当前引用是否属于指定的对象类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值