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 方法,则将 go1.toString 替换为 nTriangle.goString 行

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

从超类或子类调用 toString?

4

3 回答 3

1

nTriangle并且go1是 2 个不同的实例(您正在使用new关键字创建 2 个实例)。因此,您申请的修改go1nTriangle. 您应该从要修改的实例(即实例)中调用setColor()和方法。setFilled()nTriangle

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

System.out.println( nTriangle );

如果您在和类toString()中都覆盖该方法,那么如果实例是 a ,您将使用版本,如果您的实例是a ,您将使用版本。在类的方法内部,您可以调用该方法:GeometricObject1TriangleTriangleTriangleGeometricObject1GeometricObject1toString()TriangleGeometricObject1 toString()

@Override
public String toString() {
    return super.toString() + " - Triangle version.";
}
于 2013-07-02T20:48:54.607 回答
1

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

如果您没有覆盖超类方法setColor()setFilled()并且toString()GeometricObject1“是”之内,您可以摆脱该行

于 2013-07-02T20:49:41.093 回答
1

是的,你可能应该。

但是,您可能还希望拥有一个testGeometricObject1旨在 GeometricObject1单独测试该类的类(包括方法setColorsetFilled)。

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

于 2013-07-02T20:52:14.603 回答