我有一个基类和驱动类(继承基类)。而我的基础类是驱动类的对象。因此,当我调用重写函数时,它通过调用驱动类函数给我正确的结果,因为基类具有驱动类对象。 但是当我只是打印基类和驱动类(具有相同名称)中存在的变量时,它会打印基类中存在的变量的值。有没有办法可以打印驱动器类变量。
this.registers = new ArrayList<Supplier>();
for (int i = 0; i < this.numberOfSuppliers; i++) {
Supplier supplier = new Supplier();
supplier.setSupplierNumber(i);
supplier.setMaterials(new ArrayList<Warehouse>());
this.registers.add(supplier);
}
输出是: -
class A
{
int i = 10;
public void func(){
System.out.print("print i : " +i);
}
}
class B extends A
{
int i = 20;
public void func(){
System.out.print("print i : " +i);
}
}
class MainClass
{
public static void main(String[] args)
{
A a = new B();
System.out.println(a.i);
a.func();
}
}
答案 0 :(得分:1)
a.i
您正在引用基类。基类有“i”,你引用它,得到10。
a.func()
第二个输出给出20因为函数得到最接近的范围i,它隐藏了基类i。
答案 1 :(得分:0)
每个类都有自己的i
实例。如果您希望B
从i
继承A
,则需要从int i = 20
中删除B
。如果要在构造新i
时初始化B
,请在构造函数中执行此操作。
public B(int i) {
this.i = i;
}
但是,如果您不想这样做,并希望从父类访问i
,您可以通过说super.i
来引用它。
class B extends A
{
int i = 20;
public void func(){
System.out.print("print i : " + super.i);
}
}
答案 2 :(得分:0)
你可以实现一个方法(“getter”)并覆盖它,或者你可以使用关键字“super”访问超类'变量:
System.out.println(super.i);