Вызов нестатического метода в статическом тестовом файле
Я пишу программу из 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
тогда ДА вы можете избавиться от этой линии