【问题标题】:Calling a non static method in a static testfile在静态测试文件中调用非静态方法
【发布时间】:2013-07-02 20:44:54
【问题描述】:

我正在编写一个包含超类(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?

【问题讨论】:

  • 您有问题吗?
  • 调用 go1.setColor 和 go1.setFilled 不会影响 nTriangle。你问的是这个吗?

标签: java inheritance subclass superclass


【解决方案1】:

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

如果您没有在GeometricObject1 中覆盖超类方法setColor()setFilled()toString(),那么是的,您可以摆脱该行

【讨论】:

    【解决方案2】:

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

    但是,您可能还需要一个 testGeometricObject1 类,该类旨在单独测试 GeometricObject1 类(包括方法 setColorsetFilled)。

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

    【讨论】:

      【解决方案3】:

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

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

      System.out.println( nTriangle );
      

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

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

      【讨论】:

      • 如果超类和子类中都有 toString 方法,我是否仍然使用 nTriangle 仅从超类调用 toString?
      • 谢谢,它很有帮助。最后一个问题。超类和子类在其 toString 方法中编写了不同的内容。还会以同样的方式完成吗?
      猜你喜欢
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多