#java #subclass #tostring
#java #подкласс #tostring
Вопрос:
Итак, у меня есть 4 подкласса, которые расширяют класс DessertItem с помощью методов toString():
//candy
public String toString() {
String line1 = String.format("%-25s$%",super.getName());
String line2Pt1 = String.format("%-16.2flbs%@-8.2/f.:%", candyWeight, pricePerPound);
String line2Pt2 = String.format("%-6f", calculateCost());
String line2Pt3 = String.format("[Tax: $%.-4f]", super.calculateTax());
String outputVar = String.format("%snt%-45s%ss", line1, line2Pt1, line2Pt2, line2Pt3);
return outputVar;
}
//cookie
public String toString() {
String line1 = String.format("%-25s$%",super.getName());
String line2Pt1 = String.format("%-16.2flbs%@-8.2/f.:%", cookieQty, pricePerDozen);
String line2Pt2 = String.format("%-6f", calculateCost());
String line2Pt3 = String.format("[Tax: $%.-4f]", super.calculateTax());
String outputVar = String.format("%snt%-45s%ss", line1, line2Pt1, line2Pt2, line2Pt3);
return outputVar;
}
//icecream
public String toString() {
String line1 = String.format("%-25s$%",super.getName());
String line2Pt1 = String.format("%-16.2dscoops%@-8.2/f.:%", scoopCount, pricePerScoop);
String line2Pt2 = String.format("%-6f", calculateCost());
String line2Pt3 = String.format("[Tax: $%.-4f]", super.calculateTax());
String outputVar = String.format("%snt%-45s%ss", line1, line2Pt1, line2Pt2, line2Pt3);
return outputVar;
}
//Sundae class which extends IceCream class
public String toString() {
String line1 = String.format("%-25s$%",super.getName());
String line2Pt1 = String.format("%-16.2sTopping: %@-8.2/f.:%", toppingName, toppingPrice);
String line2Pt2 = String.format("%-6f", calculateCost());
String line2Pt3 = String.format("[Tax: $%.-4f]", super.calculateTax());
String outputVar = String.format("%snt%-45s%ss", line1, line2Pt1, line2Pt2, line2Pt3);
return outputVar;
}
Кроме того, у меня есть другой порядок классов, в котором я хотел бы получить значения метода toString():
public String toString() {
String finalOutput = "";
finalOutput = "------------------------Receipt-------------------";
for() {
Итак, мой вопрос в том, как мне получить доступ к значениям toString из подшкал, а затем как мне выполнить итерацию через них, чтобы я мог добавить значение в свою переменную finalOutput?
Комментарии:
1. Где у вас есть экземпляры 4 классов? Для доступа к методу вам нужен экземпляр
Ответ №1:
Создайте абстрактный класс:
public abstract class ToMyString
{
public abstract String toString();
private static ArrayList<ToMyString> ivClasses = new ArrayList<>();
public ToMyString()
{
super();
}
protected void addClass( ToMyString aClass )
{
ivClasses.add( aClass );
}
protected String[] getToStrings()
{
String[] toStrings = new String[ivClasses.size()];
int index = 0;
for (ToMyString aClass : ivClasses)
toStrings[index ] = aClass.toString();
return toStrings;
}
}
Затем для каждого из классов, для которых вам нужна строка toString:
public class SomeClass extends ToMyString
{
private SomeClass()
{
super();
addClass( this );
}
}
И, наконец, получить toString() из ЛЮБОГО из классов, которые расширяют ToMyString
:
for (String aString : getToStrings())
process(aString);
Комментарии:
1. Черт, забыл, ваш
DessertItem
класс будет расширятьсяToMyString
, что означает, что его подклассы будут наследоватьсяToMyString
.