Java的多态

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

比如说猫这类事物既具有猫的形态,也具有动物的形态,这就是事物的多态性。

简单说:就是一个对象对应不同的类型。

多态在代码中的体现:父类或者接口的引用指向其子类的对象。

动物 x=new 猫();//一个对象,两种形态。

动态的好处:提高了代码的重用性。前期定义的代码可以使用后期的内容。

多态的弊端:前期定义的内容不能使用(调用)后期子类定义的特有内容,比如Animals中没有看门的方法,后期狗的子类中所定义的看门方法不能使用。

多态的前提:1.子类与父类必须有关系,要么继承要么实现。

  2.要有覆盖。

abstract class Animals{
	abstract void eat();
}
class dog extends Animals{
	void eat(){
		System.out.println("啃骨头.");
	}
	void lookhome(){
		System.out.println("看家");
	}
}
class cat extends Animals{
	void eat(){
		System.out.println("吃鱼");
	}
	void catchmouse(){
		System.out.println("抓老鼠");
	}
}
public class DuoTaiDemo {
	public static void main(String[] arge){
		Animals a=new cat();	//cat既属于猫,也属于动物
		a.eat();
		Animals b=new dog();   //自动类型提升,猫对象提升成了动物类型,但是特有功能无法访问,作用就是限制对特有功能的访问。
		b.eat();
	}  
public static void method(Animals c){
	c.eat();
	}
}

}

当自动类型转换后如果还想有具体动物的特有功能,可以将对象进行向下转换。

Animals a=new cat();	//cat既属于猫,也属于动物
a.eat();
cat c=(cat)a;			//向下强制转换
c.catchmouse();

多态时,成员的特点

1.成员变量

编译时,参考引用型变量所属的类中是否有调用的成员变量,如果有,编译通过;如果没有,编译失败。

运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行所属类中的成员变量。

简单说,就是编译和运行都参考等号左边的类。在例子中即为animalsanimalsa=new cat())

2.成员函数

编译时,参考引用型变量所属的类中是否有调用的函数,如果有,编译通过;如果没有,编译失败。

运行时,参考对象所属的类中是否有调用的函数。

简单说,编译看左边,运行看右边。

3.静态函数

编译时,参考对象所属的类中是否有调用的函数。

运行时,参考对象所属的类中是否有调用的函数。

简单说,编译都运行都看左边。

其实对于静态方法来说是不需要对象的,直接用类名调用即可。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值