多态

多态:

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

多态在代码中的体现:

父类或者接口的引用指向子类的对象

可以理解为事物存在的多种体现形态。

1.多态的体现

父类的引用指向了自己的子类对象

父类的引用也可以接受本类对象 

2.多态的前提

必须是类与类之间有关系 要么继承 要么实现

通常还有一个前提存在覆盖

3.多态的好处

提高代码的扩展性

4.多态的弊端:

必须是父类访问的是父类的成员


5  .多态的应用

狗 x = new 狗();

x.吃骨头();

狗 y = (猫)x;

y.抓耗子

在多态中成员函数的特点:

在编译时期:参阅引用型变量所属的类中是否有调用的方法 如果有 编译通过 如果没有编译失败

在运行时期:参阅对象所属的类中是否有调用的方法

简单总结就是:成员函数在多态调用时 编译看左边 运行看右边

在成员变量中:编译运行都看左边[引用型变量所属的类]

在多态中,静态成员函数的特点:

无论编译和运行都参考左边

object:是所有对象的直接后者间接的父类,传说中的上帝

该类中定义的肯定是所有对象就具备的功能

equals:指示其他某个对象是否与此对象“相等”;


多态时:

成员的特点:

1.成员变量:

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

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

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

2.成员函数(非静态)

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

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

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


3.静态变量:

编译时:参考引用型变量所属的类中是否有调用的静态方法

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

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

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

代码演示:

	abstract class Animal{
		abstract void eat();
	}
	
	class Cat extends Animal{
		public void eat(){
			System.out.println(“吃鱼”);
		}
		
		public void catchMouse(){
			System.out.println(“”);
		}
	}
	class Dog extends Animal{
		public void eat(){
	
		}
		public void kanJia(){
			
		}
	
	}
	
	class DuoTaiTest{
		public static void main(String[] args){
			function(new Cat());
			function(new Dog());
			
			Animal a = new Cat();//向上转型
			a.eat();

			Cat c = (Cat)a;//向下转型
			c.catchMouse();
		}
	}

	public static void funciton(Animal a){
		a.eat();
		//由于子类类型有限,或者判断所属类型进而使其特有方法

		if(a instanceof Cat)
		{
			Cat c = (Cat)a;
			c.catchMounse();
		}
		else if(a instanceof Dog){
			Dog c = (Dog)a;
			c.kanJia();
		}
	}

这里介绍一下instanceof关键字:

instanceof关键字
A:用于判断某个对象是否是某种类型。
B:格式
对象名 instanceof 子类(实现)名


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值