Вызов нестатического метода в статическом тестовом файле

Я пишу программу из 3 частей с суперклассом (GeometricObject1) и подклассом (треугольник). Последняя часть - это тестовый файл, который должен вызвать три метода из подкласса и два из суперкласса, а затем вызвать метод 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 из суперкласса или подкласса?

3 ответа

Да, вы, вероятно, должны.

Однако вы также можете иметь testGeometricObject1 класс, который предназначен для проверки GeometricObject1 один класс (включая методы setColor а также setFilled).

Например Triangle.setColor а также GeometricObject1.setColor может не иметь одинаковую реализацию (вы всегда можете переопределить поведение в подклассе), поэтому вы хотите протестировать обе потенциальные реализации.

nTriangle а также go1 2 разных экземпляра (вы создаете 2 экземпляра с new ключевое слово). Итак, модификации, к которым вы обращаетесь go1 не эффективны для nTriangle, Вы должны позвонить setColor() а также setFilled() методы из экземпляра, который вы хотите изменить, то есть nTriangle пример.

Вы также можете позвонить toString() метод автоматически изнутри println() метод:

System.out.println( nTriangle );

Если вы переопределите toString() метод в обоих GeometricObject1 и Triangle классы, то вы будете использовать Triangle версия, если экземпляр является Triangle и GeometricObject1 версия, если ваш экземпляр GeometricObject1, Внутри toString() метод Triangle класс, вы можете позвонить GeometricObject1 toString() метод:

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

Поскольку подкласс наследует все открытые методы от суперкласса, я должен избавиться от строки

Если вы не переопределяете методы суперкласса setColor() а также setFilled() а также toString() в GeometricObject1 тогда ДА вы можете избавиться от этой линии

Другие вопросы по тегам