您的位置:首页 > 编程语言 > Java开发

Java面向对象 多态动态绑定(非静态成员函数、成员变量、静态成员函数)

2015-06-15 22:20 771 查看
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面向对象