1.成员变量
package gt;
/**
* Created by Cronous on 2017/10/30.
*/
public class day02 {
public static void main(String[] args){
Fu f = new Zi();
System.out.println("num = " + f.num);
}
}
class Fu {
int num = 2;
}
class Zi extends Fu{
int num = 3;
}
控制台打印 num = 2
这里子类对象被提升为父类对象,所以 f.num 为父类对象 num 值,如果父类没有 num 变量则编译失败
也就是编译和运行都参考左边
2.成员函数
package gt;
/**
* Created by Cronous on 2017/10/30.
*/
public class day02 {
public static void main(String[] args){
Fu f = new Zi();
f.show();
}
}
class Fu {
void show(){
System.out.println("fu show");
}
}
class Zi extends Fu{
@Override
void show() {
System.out.print("Zi show");
}
}
控制台打印 Zi show
为什么呢?按照父类提升应该打印 Fu show 的,这就是成员函数的与成员变量的区别
编译时:参考引用型变量所属的类中是否有调用的函数,有编译通过,没有,编译失败
运行时:参考对象所属类中是否有调用的函数
总结:编译看左边,运行看右边
3.静态函数
package gt;
/**
* Created by Cronous on 2017/10/30.
*/
public class day02 {
public static void main(String[] args){
Fu f = new Zi();
f.method();
}
}
class Fu {
void show(){
System.out.println("fu show");
}
static void method(){
System.out.println("fu static method");
}
}
class Zi extends Fu{
@Override
void show() {
System.out.print("Zi show");
}
static void method(){
System.out.println("zi static method");
}
}
da'y
控制台打印
fu static method
static不依赖于对象,类存在它即存在。所以提升父类型 f.method 运行父类静态代码
并且这里的 f.method 调用静态方法其实是没有意义的
结论:除了成员函数编译看左边,运行看右边,其他都只是看左边