package test;
class Father {
int num = 1;
void method1() {
System.out.println("father method1");
}
void method2() {
System.out.println("father method2");
}
static void method4() {
System.out.println("father static method4");
}
}
class Son extends Father {
int num = 2;
void method1() {
System.out.println("son method1");
}
void method3() {
System.out.println("son method3");
}
static void method4() {
System.out.println("son static method4");
}
}
public class ExtendClassDemo {
public static void main(String[] args) {
//非静态成员函数调头
//如果是子类 先看 子类 再看父类
//如果是父类 看父类
Father f = new Son();
//f为父类类型(Father),父类中找方法,父类没有编译就失败
f.method1();
f.method2();
//f.method3(); //error:编译不通过
((Son)f).method3();
System.out.println();
//子类有先找子类的方法,子类没有再找父类, 父类没有编译就失败
Son s = new Son();
s.method1();
s.method2();
s.method3();
System.out.println();
//*******以下开发中不会遇到,主要是面试题
//成员变量调用变量看 类名
//f是Father类的变量, f.num = 1
//s是Son类的变量, s.num = 2
System.out.println("num = " + f.num);
System.out.println();
System.out.println("num = " + s.num);
System.out.println();
//静态方法调用看类名,它已经和类名绑定了, f与s类名都为Father,调用Father.method4(),与成员无关
f.method4();
s.method4();
}
}
/*输出
son method1
father method2
son method3
son method1
father method2
son method3
num = 1
num = 2
father static method4
son static method4
*/
Java面向对象 多态动态绑定(非静态成员函数、成员变量、静态成员函数)
最新推荐文章于 2023-10-23 11:02:43 发布