在java中获取超类值

Sea*_*yen 3 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?
    }
}
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 5

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
    }
}
Run Code Online (Sandbox Code Playgroud)