我正在编写一个包含超类(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?
答案 0 :(得分:1)
nTriangle
和go1
是两个不同的实例(您使用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
课程(包括方法setColor
和setFilled
)。
例如Triangle.setColor
和GeometricObject1.setColor
可能没有相同的实现(您可以始终覆盖子类中的行为),因此您要测试两个潜在的实现。