Как получить значение методов toString из подклассов в другой класс и выполнить их итерацию через цикл for, чтобы добавить значение в одну строку?

#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 .