多态polymorphic:
事物存在的多种形态
多态的前提:
要有继承关系,要有方法重写,要有父类引用指向子类对象
public class Extends {
public static void main(String[] args) {
cat c=new cat();
c.eat();
Animal a=new cat();//父类指向子类继承
a.eat();
}
}
class Animal {
String color;
int leg;
public void eat(){
System.out.println("eat");
}
public void sleep() {
System.out.println("sleep");
}
}
class cat extends Animal{
public void eat(){
System.out.println("cat eat");
}
}
class dog extends Animal{
}
运行结果:
多态中成员访问特点之成员变量
public class s{
public static void main(String[] args) {
Father d=new son(); //父类引用指向子类对象
System.out.println(d.num);
son m=new son();
System.out.println(m.num);
}
}
class Father{
int num =10;
}
class son extends Father{
int num=20;
}
运行结果:
内存图解:
编译看左边(父类),运行看左边。
成员方法
public class s{
public static void main(String[] args) {
Father d=new son(); //父类引用指向子类对象
System.out.println(d.num);
d.print();
// son n=new son();
//System.out.println(n.num);
}
}
class Father{
int num =10;
public void print(){
System.out.println("f");
}
}
class son extends Father{
int num=20;
public void print(){
System.out.println("s");
}
}
运行结果
内存图解:
编译看父类,运行看子类,动态绑定
静态成员方法:
静态和类相关,算不上重写,所以访问的还是左边
执行的是父类中的。调用时相当于是类名.方法。
编译看父类运行看父类