只有普通的方法调用可以是多态的。任何域访问操作将由编译器解析,因此不是多态的。
/**
* @Description 只有普通的方法调用可以是多态的。任何域访问操作将由编译器解析,因此不是多态的。
* @Author rll
* @Date 2021-01-12 10:13
*/
public class Super {
public int i = 0;
public int getI(){
return i;
}
//将Super中的i改为j
// public int j = 0;
// public int getJ(){
// return j;
// }
}
/**
* @Description 只有普通的方法调用可以是多态的。任何域访问操作将由编译器解析,因此不是多态的。
* @Author rll
* @Date 2021-01-12 10:14
*/
public class Sub extends Super{
public int i = 1;
public int getI(){
return i;
}
public int getSupI(){
return super.i;
}
//将Super中的i改为j
// @Override
// public int getJ() {
// return super.getJ();
// }
}
/**
* @Description 只有普通的方法调用可以是多态的。任何域访问操作将由编译器解析,因此不是多态的。
* @Author rll
* @Date 2021-01-12 10:15
*/
public class Test {
public static void main(String[] args) {
Super su = new Sub();
System.out.println(su.i+" "+su.getI());//域访问不是多态,所以su.i值是Super的i输出0;getI()多态,识别为Sub的getI输出1
Sub sb = new Sub();
System.out.println(sb.i+" "+sb.getI()+" "+sb.getSupI());
//实际开发中不会出现这样的代码:1.域通常会设置成private;2.父类(基类)与子类(继承类)中的域不会赋予相同名字.
//将Super中的i改为j
// Super su = new Sub();
// System.out.println(su.j+" "+su.getJ());//这个时候你想getI是不行的
// Sub sb = new Sub();
// System.out.println(sb.i+" "+sb.getI()+" "+sb.getJ());
}
}