Java的多态
简单理解多态就是当不同的类,接受到相同的命令时候,不同的类作出不同的动作。例如:现在有猫和狗两个类,他们同属动物这个父类,当给动物这个类发出同一个命令时候,不同的动物会发出不同的动作
package HLJuniversity.RG.Learn.practice;
/**
* 测试多态
* @author RG
*
*/
// final 修饰变量 只能赋值一次 ;修饰方法 不能重写;修饰类 不能 继承
public class TestPolym {
public static void main(String[] args) {
Animal a =new Animal();
animalCry(a);
Animal d = new Dog(); //自动向上转型 编译器会认为 类型为 Animal 无法使用Dog的属性。
// d.seeDoor(); 无法使用
Dog d2 = (Dog)d; // 强制向下转型 如果要使用Dog的特有方法 必须强制转回为Dog 的类型。
d2.seeDoor(); // 可以使用
animalCry(d);
Animal c = new Cat();
// Dog c2 = (Dog)c 不可以将猫的类型转换为狗 类型转换错误
}
static void animalCry(Animal a) {//TestPoly 方法 通过父类引用 ,调用子类方法
a.shout();
}
}
// 类 动物
class Animal{
private int id;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void shout() {//shout 方法
System.out.println("叫了一声");
}
}
// 类 狗
class Dog extends Animal{
public void shout() {//重写 shout方法
System.out.println("汪汪汪");
}
public void seeDoor() {
System.out.println("I am a dog");
}
}
// 类 猫
class Cat extends Animal{
private int id;
public void shout() {//重写 shout方法
System.out.println("I am a cat");
}
}
若想运行这段代码“ package HLJuniversity.RG.Learn.practice;”不要复制进去,这是包的路径,不同设置不一样会出错。