下面是我寫的三類:多態性與實例變量
public class Shape {
public int x = 0;
public void getArea() {
System.out.println("I don't know my area!");
}
public String toString() {
return "I am a shape!";
}
public int getX() {
return x;
}
}
public class Rectangle extends Shape {
public int x = 1;
public int getX() {
return x;
}
public void getArea() {
System.out.println("L*W");
}
public String toString() {
return "I am a rectangle!";
}
}
public class Tester {
public static void main(String[] args) {
Shape s = new Shape();
Rectangle r = new Rectangle();
System.out.println(r);
System.out.println(r.x + "\n");
s = r;
System.out.println(s);
s.getArea();
System.out.println(s.x);
System.out.println(s.getX());
}
}
從測試類的主要方法的輸出是:
I am a rectangle! 1 I am a rectangle! L*W 0 1
爲什麼s.x返回0而不是1?由於不是變量的當前實例Rectangle,並且該類也具有相同的實例變量聲明,或Rectangle類中的變量是否不覆蓋Shape類中的以前的public x變量,因爲它對getX()方法在矩形類中返回1?
此外,作爲一般規則,超類只有在該類中聲明時纔有權訪問其子類方法的實現?這是否是因爲編譯器會看到具有相同簽名的相同數量的方法在「Shape」類中(使用重寫的Rectangle實現)並將它們接受爲有效的Shape方法?
由於提前,
閱讀更多關於實例變量隱藏爲什麼你的實例變量公開!!?你永遠不應該公開一個實例變量! – DrinkJavaCodeJava 2013-03-20 01:15:11
這是一個測試,看看會發生什麼。我很瞭解封裝,因爲我之前完成了MVC設計。 – PragmaticProgrammer 2013-03-20 03:25:31