多态: 父类引用类型变量指向了子类的对象或者是接口的引用类型变量指向了接口实现类的对象。 (一个对象具备多种形态)
多态的前提: 必须存在继承或者实现关系。
多态要注意的细节:
1. 多态情况下,子父类存在着同名的成员变量时,默认会访问父类的成员变量。
2. 多态情况下,子父类存在着同名的非静态函数时,默认是访问子类的成员函数。
3. 多态情况下,子父类存在着同名的静态函数时,默认是访问父类的成员函数。
4. 多态情况下,不能访问子类特有的成员。
总结:
多态情况下,子父类存在同名的成员时, 默认都会访问父类的成员.只有存在非静态的
同名函数时,才是访问子类的成员。
编译看左边,运行不一定看 右边
编译看左边: java编译器在编译的时候,会检查引用类型变量所属的类是否具备指定的成员,如果不具备,编译报错。
多态的应用场景
abstract class Animal{
String name;
String color;
static int age = 10;
public Animal(String name,String color){
this.name = name;
this.color = color;
}
public abstract void run();
public static void sleep(){
System.out.println("动物睡觉...");
}
}
//狗
class Dog extends Animal{
static int age = 20;
public Dog(String name,String color){
super(name,color);
}
public void run(){
System.out.println(name+"四条腿跑...");
}
public static void sleep(){
System.out.println("狗在睡觉...");
}
//狗特有的方法
public void bite(){
System.out.println(name+"咬人");
}
}
class Demo
{
public static void main(String[] args)
{
Dog d = new Dog("沙皮","棕色");
d.run();
Animal a = new Dog("哈士奇","白色"); //多态 父类的引用类型变量指向了子类的对象。
//System.out.println("年龄:"+ a.age);
//a.sleep();
a.bite();
}
}