多态的自我理解

/**
 1. 描述笔记本,笔记本使用USB鼠标,USB键盘
 2. 定义USB接口,笔记本要使用USB设备,即笔记本在生产时需要预留可以插入USB设备的USB接口,即就是笔记本具备使
 3. 用USB设备的功能,但具体是什么USB设备,笔记本并不关心,只要符合USB规格的设备都可以。
 4. 鼠标和键盘要能在电脑上使用,那么鼠标和键盘也必须遵守USB规范,不然鼠标和键盘的生产出来无法使用。
*/
//定义鼠标、键盘,笔记本三者之间应该遵守的规则
interface USB{
	void open();//开启功能
	void close();//关闭功能
}
//鼠标实现USB规则
class Mouse implements USB{
	public void open(){
		System.out.println("鼠标开启");
	}
	public void close(){
		System.out.println("鼠标关闭");
	}
}
//键盘实现USB规则
class KeyBoard implements USB{
	public void open(){
		System.out.println("键盘开启");
	}
	public void close(){
		System.out.println("键盘关闭");
	}	
}
// 定义笔记本
class NoteBook{
	//笔记本开启运行功能
	public void run(){
		System.out.println("笔记本运行");
	}
	//笔记本使用usb设备,这时当笔记本实体调用这个功能时,必须给其传递一个符合USB规则的USB设备
	public void useUSB(USB usb){
		//判断是否有USB设备
		if(usb != null){
			usb.open();
			usb.close();
		}
	}
	public void shutDown(){
		System.out.println("笔记本关闭");
	}
}
public class Test {
	public static void main(String[] args) {
		//创建笔记本实体对象
		NoteBook nb = new NoteBook();
		//创建鼠标实体对象
		Mouse m = new Mouse();
		//创建键盘实体对象
		KeyBoard kb = new KeyBoard();
		//笔记本开启
		nb.run();
		//笔记本使用鼠标
		nb.useUSB(m);
		//笔记本使用键盘
		nb.useUSB(kb);
		//笔记本关闭
		nb.shutDown();
	}
}

多态的好处
提高了程序的扩展性
多态的弊端
通过了父类引用操作子类对象时,只能使用父类中已有的方法,不能操作子类特有的方法 多态的前提
必须有继承或者实现的关系
通常都有重写操作

多态成员的特点

  1. 多态出现后会导致父类中的成员变量有微弱的变化
class Fu
{
	int num = 4;
}
class Zi extends Fu
{
	int num = 5;
}
class Demo 
{
	public static void main(String[] args) 
	{
		Fu f = new Zi();
		System.out.println(f.num);
		Zi z = new Zi();
		System.out.println(z.num);
	}
}

在这里插入图片描述

多态成员变量
子父类中出现同名的成员变量的时候,多态调用该变量的时候,
编译时期引用变量所属的雷诺中是否有被调用的成员变量,没有,编译失败
运行时期也是调用引用型变量所属的类中的成员变量
所以这种情况的时候编译和运行都是看的左边

  1. 多态成员函数
class Fu
{
	int num = 4;
	void show()
	{
		System.out.println("Fu show num");
	}
}
class Zi extends Fu
{
	int num = 5;
	void show()
	{
		System.out.println("Zi show num");
	}
}
class Demo 
{
	public static void main(String[] args) 
	{
		Fu f = new Zi();
		f.show();
	}
}

编译时期引用变量所属的类,当所属类中没有该调用的函数,编译失败。
运行时期引用变量所指的对象所属的类,并运行对象所属类中的成员函数。
编译看左边运行看右边

  1. 多态静态函数:
class Fu
{
	int num = 4;
	static void method()
	{
		System.out.println("fu static method run");
	}
}
class Zi extends Fu
{
	int num = 5;
	static void method()
	{
		System.out.println("zi static method run");
	}
}
class Demo 
{
	public static void main(String[] args) 
	{
		Fu f = new Zi();
		f.method();
	}
}

编译看左边,运行看右边

结论

结论:

  1. 对于成员变量,编译和运行都看左边
  2. 对于成员函数和静态函数,编译看左边,运行看右边
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值