- 概念:父类引用指向子类,从而形式多态<br>- 二者具有直接或者间接的继承关系时,父类的引用才能指向子类<br>- 父类引用仅可调用父类声明的方法和属性,不可调用子类独有的属性方法<br>
package com.qf;<br><br>public class Pet {<br> //健康值<br> int health;<br><br><br> public void toHealth(){<br> System.out.println("宠物恢复健康");<br> }<br><br><br>}<br>
package com.qf;<br><br>public class Dog extends Pet {<br><br><br> @Override<br> public void toHealth() {<br> System.out.println("狗啃骨头,恢复健康");<br> }<br><br> //独有的方法<br> public void sleep(){<br> System.out.println("狗睡觉");<br> }<br><br>}<br>
package com.qf;<br><br>public class Cat extends Pet {<br> @Override<br> public void toHealth() {<br> System.out.println("猫吃两条鱼,恢复健康");<br> }<br><br><br>}
package com.qf;<br><br>public class Master {<br> //看病的方法<br><br> //给狗看病<br>// public void kanBing(Dog dog){<br>// if (dog.health<80){<br>// dog.toHealth();<br>// dog.health=90;<br>// }<br>// System.out.println("狗看完病之后的健康值为:"+dog.health);<br>// }<br>//<br>// //给猫看病<br>// public void kanBing(Cat cat){<br>// if (cat.health<80){<br>// cat.toHealth();<br>// cat.health=90;<br>// }<br>// System.out.println("猫看完病之后的健康值为:"+cat.health);<br>// }<br><br><br> public void kanBing(Pet pet){ //Pet pet=new Cat();<br> if (pet.health<80){<br> pet.toHealth();<br>// pet.sleep(); 错误的 父类引用仅可调用父类声明的方法和属性,不可调用子类独有的属性方法<br> pet.health=90;<br> }<br> System.out.println("看完病之后的健康值为:"+pet.health);<br> }<br><br>}
package com.qf;<br><br>public class Test {<br> public static void main(String[] args) {<br> //创建主人对象<br> Master master = new Master();<br><br><br> //创建狗对象<br>// Dog dog = new Dog();<br>// dog.health=90;<br>// //创建猫对象<br>// Cat cat = new Cat();<br>// cat.health=60;<br><br><br>// master.kanBingDog(dog);<br>// master.kanBingCat(cat);<br><br>// master.kanBing(dog);<br>// master.kanBing(cat);<br><br><br> //创建猫类对象<br> Pet cat=new Cat(); //多态<br> cat.health=50;<br><br> master.kanBing(cat);<br><br> Pet pet = new Dog();//向上转型<br>// pet.sleep();<br><br> //向下转型<br> Dog dog=(Dog) pet;<br><br> dog.sleep();<br><br> Pet pet1 = new Pet();<br><br><br><br> if (pet1 instanceof Dog){<br> // 向下转型<br> Dog dog1=(Dog)pet1;<br> dog1.sleep();<br> }<br><br> }<br>}