public class Print {
public static void println(Object obj){
System.out.println(obj);
}
public static void println(){
System.out.println();
}
public static void print(Object obj){
System.out.print(obj);
}
}
上述代码是一个工具类,用来打印数据
public class Super {
public int field = 0;
public int getField(){return field;}
}
上述代码是一个简单的父类,一个整形成员变量,和一个获取该变量值的方法
public class Sub extends Super{
public int field = 1;
public int getField(){return field;}
public int getSuperField(){return super.field;}
}
上述代码是一个子类,扩展了一个获取父类属性的方法
public class FieldAccess {
public static void main(String[] args){
Super sup = new Sub();
println("sup.field = " + sup.field +
", sup.getField() = " + sup.getField());
Sub sub = new Sub();
println("sub.field = " + sub.field +
", sub.getField() = " + sub.getField() +
", sub.getSuperField() = " + sub.getSuperField());
}
}
上述是程序入口,操作类。
sup.field = 0, sup.getField() = 1
sub.field = 1, sub.getField() = 1, sub.getSuperField() = 0
上述是程序输出结果
我的疑惑是
Super sup = new Sub();
println("sup.field = " + sup.field +
", sup.getField() = " + sup.getField());
在这段代码输出的为何会是sup.field = 0, sup.getField() = 1,而不是
sup.field = 0, sup.getField() = 0,或者是sup.field = 1, sup.getField() = 1
------解决方案--------------------
在多态机制中(这里 Super sup = new Sub())
用 sup 调用的变量值(若子类和父类有相同的变量) 结果为 父类中的 变量
调用子类重写父类的方法时调用的是子类的方法
------解决方案--------------------
变量和方法不一样,“多态是针对子类重写父类的方法的,但对变量则没有多态”(这句不是我说的)。