繁体   English   中英

在java中获取超类值

[英]get super class value in java

我有2个班:

public class A
{    
    int n = 10;    

    public int getN()
    {
        return n;
    }    
}

public class B extends A
{    
    int n = 20;

    public int getN()
    {
        return n;
    }
}

public class Test
{    
    public static void main(String[] args)
    {           
        B b = new B();
        System.out.println(b.getN()); //--> return 20
        System.out.println(((A)b).getN()); //--> still return 20. 
                                           //How can I make it return 10?
    }
}

Java中的所有方法都是虚拟的。 也就是说,没有办法从外部调用方法的“超级”版本。 转换为A将无济于事,因为它不会更改对象的运行时类型。

这可能是您最好的选择/解决方法:

class A {

    int n = 10;

    public int getN() {
        return n;
    }

    public final int getSuperN() {  // "final" to make sure it's not overridden
        return n;
    }
}


class B extends A {

    int n = 20;

    public int getN() {
        return n;
    }
}

public class Main {

    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.getN());      // --> return 20
        System.out.println(((A)b).getN()); // --> still return 20.
        System.out.println(b.getSuperN()); // --> prints 10
    }
}

由于多态性,这个东西不起作用。 B仍然是阶级B即使你丢在它的超类。

我想你需要这样的东西:

public class B extends A
{

   int n = 20;

   /**
   * @return the super n
   */
   public int getSuperN()
   {
      return super.n;
   }
}

你不能使值为“10”,因为对象的实例是针对B类的,当你进行转换时,你唯一要做的就是更改define类而不是设置对象B的值,在其他如果你需要得到10这样的话

b = new A();

你看到的是行动中的多态性。 由于bB ,因此总是调用该方法(返回20)(无论是否将其转换为A )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM