静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边作者: Gqg 时间: 2016-3-21 23:44
多态中的成员访问特点之成员变量)
* 成员变量
* 编译看左边(父类),运行看左边(父类)。
/*
成员变量
编译看左边(父类),运行看左边(父类)
成员方法
编译看左边(父类),运行看右边(子类)。动态绑定
静态方法
编译看左边(父类),运行看左边(父类)。
(静态和类相关,算不上重写,所以,访问还是左边的)
只有非静态的成员方法,编译看左边,运行看右边
*/
案例:
class Demo2_Polymorphic {
public static void main(String[] args) {
Father f = new Son(); //父类引用指向子类对象
System.out.println(f.num); //相当于是Father.method()
Son s = new Son();
System.out.println(s.num);
}
}
class Father {
int num = 10;
}
class Son extends Father {
int num = 20;
}
(多态中的成员访问特点之成员方法)
* 成员方法
* 编译看左边(父类),运行看右边(子类)。
案例:
class Demo2_Polymorphic {
public static void main(String[] args) {
Father f = new Son();
f.print(); //相当于是Father.method()
}
}
class Father {
int num = 10;
public void print() {
System.out.println("father");
}
}
class Son extends Father {
int num = 20;
public void print() {
System.out.println("son");
}
}
(多态中的成员访问特点之静态成员方法)
* 静态方法
* 编译看左边(父类),运行看左边(父类)。
* (静态和类相关,算不上重写,所以,访问还是左边的)
* 只有非静态的成员方法,编译看左边,运行看右边
案例:
class Demo2_Polymorphic {
public static void main(String[] args) {
Father f = new Son();
f.method(); //相当于是Father.method()
}
}
class Father {
int num = 10;
public static void method() {
System.out.println("father static method");
}
}
class Son extends Father {
int num = 20;
public static void method() {
System.out.println("son static method");
}
} 作者: a13979214809 时间: 2016-3-22 00:38
其实不必想那么多看左边看右边,比如 fu f=new zi();是父类控制子类的对象实现父类中已有的东西,一切照着父类写就行了。至于实现方法反过来了?很简单啊,你这么理解,因为子类把方法重写了,重写了嘛 所以调用方法就用重写后的 这样比死背左边右边容易理解多了作者: wangshoukai 时间: 2016-3-22 15:56
多态简单说就是因为子类重写了父类的方法,所以执行的时候会执行被修改以后的。作者: 菜逼 时间: 2016-3-23 00:37
看了各位大神的回复,感觉更蒙了........作者: 278008379 时间: 2016-3-23 12:29
大家说的都很好作者: yc01 时间: 2016-3-23 16:07
现在理解不了 ,就先记着结果,学的多了有空,在看前面的 ,估计能理解了.读书千遍,其义自现嘛{:2_36:}作者: dbymzss 时间: 2016-3-25 23:18
多态是父类引用子类对象;编译都看父类,,,运行时只有非静态成员方法看子类....作者: Ak-47 时间: 2016-3-26 02:08
这个要理解啊作者: dong19910527 时间: 2016-3-28 12:59
记住就行 等过一段回头一看就明白了