Java面向对象的三大特征---多态
- 创建一个小女孩,调用三个对象的方法
package com.dynamic;
public class Girl {
public void play(Animal animal){
animal.shout();
animal.advice();
}
}
package com.dynamic;
public class Animal {
public void shout(){
System.out.println("我是动物,需要人类的爱护");
}
public void advice(){
System.out.println("我是小动物,我们有自己的特色");
}
}
package com.dynamic;
public class Cat extends Animal {
public void shout(){
System.out.println("我是小猫,会喵喵叫");
}
public void advice(){
System.out.println("我是小猫,会爬树");
}
//子类Cat中特有的方法,需要进行向下转换;将animal转换成cat,进行调用(这里的animal是Animal的对象);Cat cat= (cat)animal;
public void eat(){
System.out.println("我是小猫,我爱喝牛奶");
}
}
package com.dynamic;
//这里统一继承父类Animal,由子类抽取父类的过程叫做泛化
public class Dog extends Animal{
public void shout(){
System.out.println("我是小狗,会汪汪叫");
}
public void advice(){
System.out.println("我是小狗,会看家");
}
}
package com.dynamic;
public class Pig extends Animal {
public void shout(){
System.out.println("我是小猪,会叻叻叫");
}
public void advice(){
System.out.println("我是小猪,会吃饭");
}
}
package com.dynamic;
public class Test {
public static void main(String[] args) {
Girl girl =new Girl();
/*Dog dog =new Dog();*/
/*Cat cat =new Cat();*/
/*Pig pig = new Pig();*/
Animal animal =new Cat();//这里将new Cat出来的对象虚赋值给animal;这里用到多态’这里是像是将cat转换成animal类型
Cat cat = (Cat)animal;//向下将animal转换成cat类型;目的是为了获取子类中特有的内容eat()
cat.eat();
girl.play(animal);
}
}