-7
public class A{ 
    int x=20;
    public int getX(){
     return x;
    }
    public void setX(int x){
     this.x=x;
    }
}

public class B extends A{
    int x=10;
   public void setX(int x){
       this.x=x;
     } 
    public static void main(String[] args) {
       B a=new B(); or A a= new B();
       a.setX(30);
       System.out.println(a.getX());/*it will always print parent class X*/
    }
}
4

2 回答 2

6

B中没有getX()方法。它总是会调用继承的方法。如果要模拟运行时多态性,则必须重写子类中继承的方法。

于 2013-06-14T09:53:19.583 回答
2

为了获得子功能,您必须在子类中覆盖超类方法。

因此,代码更改为

public class B extends A{
    int x=10;
   public void setX(int x){
       this.x=x;
     } 

  @override
  public int getX(){
    return 6;  // here you overridden that method  return your new value here 
   }
    public static void main(String[] args) {
       B a=new B(); or A a= new B();
       a.setX(30);
       System.out.println(a.getX());/*new value prints*/
    }
}
于 2013-06-14T09:56:50.077 回答