JAVA基础第八天学习日记_多态

---------------------- android培训 java培训 、期待与您交流! ----------------------

多态的简介:

1. 多态的体现

父类的引用指向了自己的子类对象。父类的引用也可以接收自己的子类对象。

2. 多态的前提

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

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

3. 多态的好处

多态的出现大大提高了程序的扩展性。

4. 多态的弊端

提高了扩展性,但是只能使用父类的引用访问父类中的成员。

在使用多态的过程中,Animal a=new Cat();相当于是一次类型的提升,将Cat类型的对象转换成了父类Animal对象。这时候Cat的对象便不能调用其特有的方法了。这是候要调用的话,便应该强制将父类的引用转换成子类类型。Cat c=(Cat)a;这时候便能使用对象c调用Cat特有的方法了。

注意:在以上过程中自始至终我们都是在对子类的对象在做着变化。不能将父类对像转换为子类类型。我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以强制转换。

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

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

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

总结起来:成员函数在多态调用时,编译看左边,运行看右边。

二、在多态中成员变量的特点:

无论编译和运行,都参考左边(引用型变量所书的类)

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

无论编译和运行,都参考左边(引用型变量所书的类)

a instanceof Cat:如果a是Cat类的对象。一般不使用instanceof关键字,因为需要不断的判断,这会导致程序的扩展性变差。两种情况下使用:子类有限(如男女性别)、需要特有的方法来比较。

在主板实例中,如果直接在主板类中定义使用网卡声卡的方法,相当于在现实生活中将网卡声卡等焊接在了主板上,如果主板需要更新,便需要更换主板,这中设计方式使主板的扩展性变得很差。在这种情况下降低主板和声卡网卡的耦合性是解决问题的关键。创建一个接口,让网卡声卡符合接口的规范,便是一个非常好的解决方式。

public class InterfaceDemo2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MainBoard mb=new MainBoard();
		mb.run();
		mb.usePCI(new NetCard());
	}

}
interface PCI
{
	void open();
	void close();
}
class NetCard implements PCI
{
	public void open()
	{
		System.out.println("netcard work");
	}
	public void close()
	{
		System.out.println("netcard close");
	}
}
class SoundCard implements PCI
{
	public void open()
	{
		System.out.println("soundcard work");
	}
	public void close()
	{
		System.out.println("soundcard close");
	}
}
class MainBoard
{
	public void run()
	{
		System.out.println("mainboard run");
	}
	public void usePCI(PCI p)//PCI p=new netcard();接口型引用指向自己的子类对象。这样不论定义了其他的功能模块,将其实现PCI就可以直接传入使用了。
	{
		if(p!=null)
		{
			p.open();
			p.close();
		}
	}
}


 

---------------------- android培训 java培训 、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值