【1】多态跟属性无关,多态是指方法的多态,而不是属性的多态。
【2】案例代入:小女孩养宠物(对象为小女孩和宠物)
Animal类(父类)
package com.hhf.test01;
public class Animal {//父类:动物
public void shout(){
System.out.println("动物必备技能之一:叫...");
}
}
Cat类(子类)
package com.hhf.test01;
public class Cat extends Animal {
public void shout(){
System.out.println("跟我一起学猫叫!!一起喵喵喵");
}
public void scratch(){
System.out.println("小猫咪,会挠人");
}
}
Dog类(子类)
package com.hhf.test01;
public class Dog extends Animal{
public void shout(){
System.out.println("你在狗叫什么啊?");
}
public void guard(){
System.out.println("狗会保护主人,看家护院");
}
}
Girl类
package com.hhf.test01;
public class Girl {
//跟猫玩
/* public void play(Cat cat){
cat.shout();
}*/
//跟狗玩
/*public void play(Dog dog){
dog.shout();
}*/
//跟动物玩
public void play(Animal an){
an.shout();
}
}
Test测试类
package com.hhf.test01;
public class Test {
public static void main(String[] args) {
//具体的猫
// Cat c = new Cat();
//具体的小女孩
Girl g = new Girl();
//小女孩跟猫玩
// g.play(c);
//具体的狗
// Dog d = new Dog();
//小女孩跟够玩
// g.play(d);
//具体的动物
Cat c = new Cat();
Animal an=c;
// Animal an=new Animal();
g.play(an);
}
}
【3】多态特点
-
先有父类,再有子类——》叫作继承;先有子类,再有父类——》叫作泛化
-
什么是多态:多态就是多种状态,同一个行为,不同的子类表现出来不同的形态。多态指的就是同一个方法调用,然后由于对象不同会产生不同的行为。
-
多态的好处:为了提高代码的扩展性,符合面向对象的设计原则:开闭原则;开闭原则:指的就是扩展是开放的,修改是关闭的;注意:多态可以提高扩展性,但是扩展性没有达到最好,以后我们会学习反射。
-
多态的要素:
a:继承
b:重写:子类对父类的方法重写
c:父类引用指向子类对象:
Cat c = new Cat();
Animal an=c;
将上面的代码合成一句话:Animal an= new Cat();
=左侧:编译期的类型; =右侧:运行期的类型
Animal an= new Pig();
g,play(an);
public void play(Animal an){
an.shout();
}
上面的代码,也是多态的一种非常常见的应用场合:父类当方法的形参,然后传入的是具体的子类的对象,然后调用同一个方法,根据传入的子类的不同展现出来的效果也不同,构成了多态
【4】多态内存分析
现在我就想访问到eat()方法和weight属性: