class Fu{
int num = 5;
void method1(){
System.out.println("fu method_1");
}
void method2(){
System.out.println("fu method_2");
}
static void method4(){
System.out.println("fu method_4");
}
}
class Zi extends Fu{
int num = 8;
void method1(){
System.out.println("zi method_1");
}
void method3(){
System.out.println("zi method_3");
}
static void method4(){
System.out.println("zi method_4");
}
}
public class DuoTai {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Zi z = new Zi();
z.method1();
z.method2();
z.method3();
System.out.println(z.num);
/*核心::::
*在多态中成员函数(非静态)的特点:
*在编译时期:参阅引用型变量所属的类(Fu)中是否有调用的方法,如果有,编译通过,如果没有则编译失败
*在运行时期:参阅对象所属的类(Zi)中是否有调用的方法
*简单总结就是:成员函数(非静态)在调用多态时,编译看左边,运行看右边。子类没有才看父类
*对于静态函数(static)来讲:
*无论编译和运行都参考左边。不参考右边的的对象。
*在多态中成员变量的特点:
*无论编译和运行,都参考左边(引用型变量所属的类);
* */
Fu f = new Zi();
f.method1();
f.method2();
//f.method3();//找不到对象 故编译不通过
System.out.println(f.num);
f.method4();
}
}