黑马程序员——多态的核心思想

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


/*


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


人:男人,女人


动物:猫,狗


猫 x= new 猫();


动物 x= new 猫();


1.多态的前提
必须是类与类之间有关系,要么继承,要么实现。
通常还有一个前提,就是存在覆盖
2.多态的表现形式 
父类的引用指向了自己的子类对象;
父类的引用也可以接受自己的子类对象。
3.多态的应用
4.多态的好处
多态的出现大大的提高的程序的扩展性
5.多态的弊端
提高的代码的扩展性,但是只能使用父类的引用访问父类中的成员。


6.多态的出现代码中的特点
多态的两种表现形式:重载和覆盖




在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有编译失败
在运行时期:参阅对象所属的类中是否有调用的方法


在多态中静态成员函数的特点:
无论编译和运行,都参考左边(引用型变量所属的类)


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


在多态中成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)










非静态有重写的作用
*/
<pre name="code" class="java">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() {
		System.out.println("吃骨头");
	}

	public void kanJia() {
		System.out.println("看家");
	}

}

class DuoTaiDemo {
	public static void main(String[] args) {
		// function(new Cat());
		// function(new Dog());
		Animal a = new Cat();// 类型提升,向上转型
		a.eat();
		// 如果想要调用猫的特有方法时,如何操作
		// 强制将父类的引用,转换成子类类型
		Cat c = (Cat) a;
		c.catchMouse();
		// 千万不要出现这样的操作,就是将父类对象转成子类类型。
		// 我们能转换 的是父类应用指向了子类对象时,该引用可以被提升,也可以被强制转换
		// 多态自始至终都是子类对象在做着变化
		// Animal a = new Animal();
		// Cat c = (Cat)a;

	}

	public static void function(Animal a)// 提高代码的扩展性
	{

		a.eat();
	}
	/*
	 * public static void function(Dog d){
	 * 
	 * 
	 * d.eat(); }
	 */
}


 
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值