1 回答
TA贡献1876条经验 获得超5个赞
我知道字段只是隐藏而不是覆盖......
确切地。tires由 所创建的对象中有两个字段new Maruti,tires的字段Car和tires的字段Maruti。您访问哪一个取决于您用于访问该对象的引用的类型。的类型this由该方法所在的类决定:this在Maruti方法内具有类型Maruti;this方法内的Car类型为Car。这就是Maruti'showManyTires访问 'sMaruti tires和Car'showManyTires访问Car's的原因tires,即使在这两种情况下对象this引用的是一个Maruti对象。
使用公共字段和更明显的类型可能更容易看到:
class Base {
public int a = 1;
}
class Sub extends Base {
public int a = 2;
}
public class Main {
public static void main(String[] args) {
Sub s = new Sub();
Base b = s;
System.out.println(s.a); // 2
System.out.println(b.a); // 1
}
}
s是类型Sub,b是类型Base。它们都引用同一个对象,但请注意用于访问字段的引用类型如何影响访问哪个字段。
对于字段来说是这样,对于方法来说则不然:
class Base {
public int a = 1;
public int method() {
return 1;
}
}
class Sub extends Base {
public int a = 2;
public int method() {
return 2;
}
}
public class Main {
public static void main(String[] args) {
Sub s = new Sub();
Base b = s;
System.out.println(s.a); // 2
System.out.println(b.a); // 1
System.out.println(s.method()); // 2
System.out.println(b.method()); // 2
}
}
添加回答
举报