2013-07-02 90 views
0

我正在用超类(GeometricObject1)和子类(三角形)编写3部分程序。最后一部分是需要调用子类中的三个方法和超类中的两个方法的测试文件,然后从超类中调用toString方法。这里是我的测试文件代码:在静态测试文件中调用非静态方法

/** 
* Write a description of class testTriangle here. 
* 
* @author Sophia 
* @version 
*/ 
public class testTriangle 
{ 
    public static void main(String[] args) 
    { 

     Triangle nTriangle = new Triangle(); 
     GeometricObject1 go1 = new GeometricObject1(); 

     nTriangle.setside1(1.0); 
     nTriangle.setside2(1.5); 
     nTriangle.setside3(1.0); 
     go1.setColor("yellow"); 
     go1.setFilled(true); 

    /*Triangle.setside1(1.0); 
    Triangle.setside2(1.5); 
    Triangle.setside3(1.0); 
    super.setColor("yellow"); 
    super.setFilled(true); 
    */ 


    System.out.println(go1.toString()); 
} 
} 

你可以使用nTriangle从超类或子类中调用公共方法吗?如果是的话,使用nTriangle来调用超类和子类的方法会更好吗?或者更好地保持原样?

如果在超类和子类两者toString方法将在符合nTriangle.goString替换go1.toString

System.out.println(go1.toString()); 

呼叫从超类或子类了toString?

+2

你有问题要问? – jlordo

+0

调用go1.setColor和go1.setFilled不会影响nTriangle。你在问什么? – Dsynomic

回答

1

nTrianglego1是2个不同的实例(您正在使用new关键字创建2个实例)。因此,您应用于go1的修改对nTriangle无效。您应该从要修改的实例中调用setColor()setFilled()方法,即nTriangle实例。

您也可以从println()方法内部自动调用toString()方法:

System.out.println(nTriangle); 

如果忽略toString()方法在两个GeometricObject1Triangle类,那么您将使用Triangle版本,如果如果您的实例是GeometricObject1,则实例是TriangleGeometricObject1版本。里面的Triangle类的toString()方法,你可以调用GeometricObject1 toString()方法:

@Override 
public String toString() { 
    return super.toString() + " - Triangle version."; 
} 
+0

如果超类中存在toString方法,并且子类仍然使用nTriangle仅从超类调用toString? –

+0

我在回答中添加了一些信息。 – eternay

+0

谢谢你有帮助。只是最后一个问题。超类和子类在toString方法中写入不同的东西。它仍然会以同样的方式完成吗? –

1

因为子类继承了超 所有公共方法,我应该摆脱线的

如果你不覆盖超类方法setColor()setFilled()toString()GeometricObject1然后是你可以摆脱那条线

1

是的,你可能应该。

但是,您可能还希望有一个testGeometricObject1类,该类仅用于测试GeometricObject1类(包括方法setColorsetFilled)。

例如Triangle.setColorGeometricObject1.setColor可能没有相同的实现(您总是可以覆盖子类中的行为),因此您要测试两个潜在的实现。