java语言中的多态概述

多态:一个对象对应着不同类型

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

 

多态的好处:

提高了代码的扩展性,前期定义的代码可以使用后期的内容。

多态的弊端:

         前期定义的内容不能使用后期子类中定义的特有内容。

 

多态的前提:

1,必须有关系,(继承,实现)。

2,要有覆盖。


Animal a =new Cat();

自动类型提升,猫对象提升了动物类型。但是特有功能无法访问。可以限制对特有功能的访问。专业讲:向上转型。将子类型隐藏,就不能使用子类的特有方法。

如果还想用具体动物猫的特有功能,可以将该对象进行向下转型。目的是为了使用子类中的特有方法。

Cat c = (Cat)  a;

注意:对于转型,自始至终都是子类对象在做着类型的变化。

if (a instanceof Cat){
	Cat c=(Cat)  a;
}


instanceof:用于判断对象的具体类型(类或是接口),只能用于引用数据类型判断。

通常在向下转型前用于健壮性的判断。

 

多态时,成员的特点:

1,成员变量

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

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

简单说:编译和运行都参考等号左边。

2,成员函数(重点)非静态

编译时:参考引用型变量所述的类中是否有调用的成员函数,有,编译通过,没有编译失败。

运行时:参考的是对象所述的类中是否有调用的函数。动态绑定

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

例子:

class Outer 
{
	void method(){
		Object obj =new Object(){
			public void show(){
				System.out.println("show run");
			}
		};
		obj.show();//错误提示,找不到符号
//因为匿名内部类这个子类对象被向上转型成了Object类型。这样就不能再使用子类的特有方法了
	}
}
class InnerClass
{
public static void main(String [] args)
	{
		new Outer().method();
	}
}

3,静态函数

编译时:参考引用型变量所述的类中是否有调用的静态方法,有,编译通过,没有编译失败。

运行时:参考引用型变量所述的类中是否有调用的静态方法。

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

 

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








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值