/*
多态: 父类的引用类型变量指向了子类的对象 或者是接口的引用类型变量指向了接口实现类对象。
多态的前提: 必须存在继承或者实现关系。
多态要注意的细节:
1. 多态情况下,子父类存在同名的成员变量时,默认是访问父类的成员变量。
2. 多态情况下,子父类存在同名的非静态成员函数时,默认是访问子类的成员函数。
3. 多态情况下,子父类存在同名的静态成员函数时,默认是访问父类的成员函数
4. 多态情况下,不能访问子类特有的成员。
*/
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();
}
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 void bite(){
System.out.println(name+"咬人...");
}
}
class Demo2
{
public static void main(String[] args)
{
//编译看左边:java编译器在编译的时候,会检测引用变量所属的类型是否具备指定的成员,如果不具备编译报错。
Animal a = new Dog("哈士奇","白色"); //父类的引用类型变量指向了子类对象。
//System.out.println("age = "+a.age);
a.bite();
}
}
多态: 父类的引用类型变量指向了子类的对象 或者是接口的引用类型变量指向了接口实现类对象。
多态的前提: 必须存在继承或者实现关系。
多态要注意的细节:
1. 多态情况下,子父类存在同名的成员变量时,默认是访问父类的成员变量。
2. 多态情况下,子父类存在同名的非静态成员函数时,默认是访问子类的成员函数。
3. 多态情况下,子父类存在同名的静态成员函数时,默认是访问父类的成员函数
4. 多态情况下,不能访问子类特有的成员。
*/
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();
}
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 void bite(){
System.out.println(name+"咬人...");
}
}
class Demo2
{
public static void main(String[] args)
{
//编译看左边:java编译器在编译的时候,会检测引用变量所属的类型是否具备指定的成员,如果不具备编译报错。
Animal a = new Dog("哈士奇","白色"); //父类的引用类型变量指向了子类对象。
//System.out.println("age = "+a.age);
a.bite();
}
}