Java扩展了奇怪的输出

时间:2012-02-23 14:26:33

标签: java extend extends

我用Java编写了一个小程序,有一些我不明白的东西。

我编写的程序有3个类kingClass,masterClass和workClass。 workClass扩展了masterClass。

程序:在主类(kingClass)中我声明了masterClass和workClass,并且使用masterClass我给变量x和y赋值。在kingClass的最后,我调用了一个addNum函数,该函数对masterClass中的两个数字求和。

现在问题了:我预计当我运行程序时它会给我一个我用输入给出的两个数字的总和,而不是我在构造函数中给出的数字的总和。

如何编写此程序,以便addNum返回我输入的数字之和的值。

抱歉英文不好,谢谢..

kingClass

public class kingClass 
{
public static void main(String[] args) 
{
    masterClass mClass=new masterClass();

    mClass.setX(10);
    System.out.println(mClass.getX());

    mClass.setY(5);
    System.out.println(mClass.getY());

    workClass wClass = new workClass();
    System.out.println(wClass.addNum());
}
}

大师

public class masterClass 
{ 
private int x;
private int y;

masterClass()
{
    x=0;
    y=0;
}

public void setX(int a) {x=a;}
public void setY(int a) {y=a;}

public int getX() {return x;}
public int getY() {return y;}


}

workClass

public class workClass extends masterClass 
{   
int num=getX()+getY();
public int addNum() {return num;}
}

5 个答案:

答案 0 :(得分:6)

以下两个陈述:

masterClass mClass=new masterClass();
workClass wClass = new workClass();

创建两个完全独立的对象。当你修改一个时,这对另一个没有影响。

你的意思是:

public static void main(String[] args) 
{
    workClass wClass = new workClass();

    wClass.setX(10);
    System.out.println(wClass.getX());

    wClass.setY(5);
    System.out.println(wClass.getY());

    System.out.println(wClass.addNum());
}

workClass扩展masterClass这一事实使您可以在masterClass的实例上使用workClass的公共方法。

您的addNum()方法中还有一个错误:

public class workClass extends masterClass 
{   
    public int addNum() {return getX() + getY();}
}

您当前的实施在构建时将这些数字加在一起,而忽略了对xy构建后所做的任何更改。

答案 1 :(得分:0)

创建x的对象时,不会将值分配给yWorkClass。扩展类只意味着数据成员是继承的。这并不意味着在创建派生类的新对象时,您创建的基类的所有对象都将自动复制到派生类。

答案 2 :(得分:0)

您已在mClass实例上为x和y分配值,而不是在wClass上,因此num将始终为零。

答案 3 :(得分:0)

你有两个错误:

  • 首先,您要在一个对象(第一个masterClass实例)上设置值,并在另一个对象上添加值(workClass,它是一个不同的对象实例)。
  • 第二:您的num属性将在创建时设置,而不会在以后重新评估。这是因为您已经定义了它来分配值。

如何修复它:

public class kingClass 
{
   public static void main(String[] args) 
   {
      //fix the first error: set and calculate at the very same object
       workClass mClass=new workClass();

       mClass.setX(10);
       System.out.println(mClass.getX());

       mClass.setY(5);
       System.out.println(mClass.getY());

       System.out.println(mClass.addNum());
    }
}

public class workClass extends masterClass  {   

   public int addNum() {
      //fix the second point: don't save the value, but recalc every time you need with the actual current value of x and y
      return getX()+getY();
   }
}

答案 4 :(得分:0)

mClasswClass是两个不同的对象。

此外,在对象创建期间会添加,因此不会添加10和5。

因此,您需要对kingClass以及workClass进行修改。

class kingClass 
{
public static void main(String[] args) 
{
    workClass wClass=new workClass();

    wClass.setX(10);
    System.out.println(wClass.getX());

    wClass.setY(5);
    System.out.println(wClass.getY());

    System.out.println(wClass.addNum());
}
}
class workClass extends masterClass 
{   
public int addNum() {return getX()+getY();}
}