在静态测试文件中调用非静态方法

时间:2013-07-02 20:44:54

标签: java inheritance subclass superclass

我正在编写一个包含超类(GeometricObject1)和子类(Triangle)的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?

3 个答案:

答案 0 :(得分:1)

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

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

System.out.println( nTriangle );

如果您覆盖toString()GeometricObject1类中的Triangle方法,那么如果实例为{Triangle,则您将使用Triangle版本如果您的实例是GeometricObject1,则{1}}和GeometricObject1版本。在toString()类的Triangle方法内,您可以调用GeometricObject1 toString()方法:

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

答案 1 :(得分:1)

  

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

如果您没有覆盖setColor()中的超类方法setFilled()toString()以及GeometricObject1,那么您可以删除该行

答案 2 :(得分:1)

是的,你可能应该这样做。

但是,您可能还想要一个testGeometricObject1课程,该课程专门用于测试GeometricObject1课程(包括方法setColorsetFilled)。

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