学了java 的多态一节,对里面的
"多态研究的内容(对象):
A:成员变量:
编译看左边,执行看左边
B:成员方法:
编译看左边,执行看右边
C:静态修饰成员:
编译看左边,执行看左边"(引用自黑马程序员java基础)
一段内容理解的不是很懂,于是自己写了个小程序帮助理解了一下,具体的分析内容直接放在了代码注释中,自认为理解起来还好。
public class DuotaiDemo {
public static void main(String[] args){
Fu f = new Zi();
f.eat();
f.sleep();
// f.watch(); 这句话不会编译通过
Show.shouAge(f.age);
}
}
/*
*1、被static修饰的成员编译看左边,执行也看左边,也就是说编译和执行都是以父类为准,可以理解为两个静态函数都在方法区中,直接用类名调用就可以了
* 但是在eclipse中编译时候会发现编译器会产生warning,提示说:父类中的函数最好用调用静态方法的方式去调用它。
*2、没有被static修饰的成员函数,编译看左边(即只有父类中有这个函数才能编译通过,如果父类中没有这个函数则编译不会通过)
* 执行看右边(即执行时候如果子类的函数对父类函数进行了重写,则直接调用子类的函数,而不会使用父类的函数)
*3、没有被static修饰过的成员变量,编译看左边,执行看左边(这句话目前自己还没想到什么好的解释,希望理解的人指教一下)
*
*/
class Fu{
public int age = 50;
public static void eat(){
System.out.println("fu eat");
}
public void sleep(){
System.out.println("fu sleep");
}
}
class Zi extends Fu{
public int age = 20;
public static void eat(){
System.out.println(" zi eat");
}
public void watch(){
System.out.println("zi watch");
}
}
class Show{
public static void shouAge(int age ){
System.out.println(age);
}
}
运行的结果是
fu eat
fu sleep
50