2015-03-16 1 views
-3

Извините, я знаю, что этот код может быть значительно сокращен здесь и там, я просто не получил, как наследование действительно работает.Что случилось с тем, как я использую Inheritance в Java?

Мой вопрос: как мне сделать так, чтобы методы в моем классе machoke и machop не распечатывали эти избыточные статистические данные.

public class FP { 
    public void string() { 
     System.out.println("A Standard fighting pokemon's stats are:"); 
    } 

    public double weight() { 
     double fWeight = 65; 
     System.out.println("Weight: " + fWeight); 
     return fWeight; 
    } 

    public double arm() { 
     double fArm = 21; 
     System.out.println("Arm Reach: " + fArm); 
     return fArm; 
    } 

    public double leg() { 
     double fLeg = 22; 
     System.out.println("Leg Reach: " +fLeg); 
     return fLeg; 
    } 

    public double punch() { 
     double fPunch = 40; 
     System.out.println("Punch Damage: " + fPunch); 
     return fPunch; 
    } 

    public double kick() { 
     double fKick = 35; 
     System.out.println("Kick Damage: " + fKick); 
     return fKick; 
    } 

    public double bodySlam() { 
     double fBodySlam = 150; 
     System.out.println("Body Slam damage: " + fBodySlam); 
     return fBodySlam; 
    } 
} 



public class Machop extends FP { 
    public double DMG_MULTI = 1.5; 

    public void string() { 
     System.out.println("Machop's stats are:"); 
    } 

    public double bodySlam(){ 
     double fBodySlam = super.bodySlam()*DMG_MULTI; 
     System.out.println("Body Slam damage: "+fBodySlam); 
     System.out.println(); 
     return fBodySlam; 
    } 
} 


public class Machoke extends Machop { 
    public void string() { 
     System.out.println("Machoke's stats are:"); 
    } 

    public double weight() { 
     double fWeight = super.weight()*1.75; 
     System.out.println("Weight: " + fWeight); 
     return 0; 
    } 

    public double arm() { 
     double fArm = super.arm()*1.75; 
     System.out.println("Arm Reach: " + fArm); 
     return fArm; 
    } 

    public double leg() { 
     double fLeg = super.leg()*1.75; 
     System.out.println("Leg Reach: " +fLeg); 
     return fLeg; 
    } 

    public double punch() { 
     double fPunch = super.punch()*1.75; 
     System.out.println("Punch Damage: " + fPunch); 
     return fPunch; 
    } 

    public double kick() { 
     double fKick = super.kick()*1.75; 
     System.out.println("Kick Damage: " + fKick); 
     return fKick; 
    } 

    public double bodySlam() { 
     double fBodySlam = super.bodySlam()*2; 
     System.out.println("Body Slam damage: " + fBodySlam); 
     return fBodySlam; 
    } 

    public double submission(){ 
     double fSubmission = super.bodySlam()*1.5; 
     System.out.println("Submission damage: " + fSubmission); 
     System.out.println(); 
     return 0; 
    } 
} 


public class Call { 
    public static void main(String args[]) { 
     FP fp = new FP(); 
     fp.string(); 
     fp.weight(); 
     fp.arm(); 
     fp.leg(); 
     fp.punch(); 
     fp.kick(); 
     fp.bodySlam(); 
     System.out.println(); 

     Machop a = new Machop(); 
     a.string(); 
     a.weight(); 
     a.arm(); 
     a.leg(); 
     a.punch(); 
     a.kick(); 
     a.bodySlam(); 

     Machoke b = new Machoke(); 
     b.string(); 
     b.weight(); 
     b.arm(); 
     b.leg(); 
     b.punch(); 
     b.kick(); 
     b.bodySlam(); 
     b.submission(); 
    } 
} 

Выход:

Стандартная статистика боевых действий Pokemon являются:
Вес: 65,0
Arm Reach: 21,0
Leg Reach: 22,0
Удар повреждения: 40,0
удар повреждения: 35,0
Ущерб от повреждения корпуса: 150,0

статистика Machop являются:
Вес: 65,0
Arm Reach: 21,0
Leg Reach: 22,0
Удар повреждения: 40,0
удар повреждения: 35,0
Body Slam повреждения: 150,0
Body Slam повреждения: 225,0

статистика Machoke являются:
Вес: 65,0
Вес: 113,75
Arm Reach: 21,0
Arm Reach: 36,75
Leg Reach: 22,0
Leg Reach: 38,5
Удар повреждения: 40,0
Удар повреждения: 70,0
удар повреждения: 35,0
удар повреждения: 61,25
Body Slam повреждения: 150,0
Body Slam повреждения: 225,0
Body Slam повреждения: 450,0
Body Slam повреждения: 150,0
Body Slam повреждения: 225,0
повреждение Подача: 337,5

+5

Это * действительно * длинный образец, что затрудняет нам поиск проблемы. Не могли бы вы дать * короткий *, но полный пример, например. просто с помощью одного вызова метода? (Похоже, что результат вызван 'супер' вызовами ... если вы не хотите, чтобы ваши методы записывали выходные данные, просто не делайте этого ...) –

+1

Также, пожалуйста, правильно отформатируйте свой пример кода, он делает его гораздо легче читать. – Warkst

+0

Чтобы ответить на ваш вопрос '', как это сделать, чтобы методы в моем классе machoke и machop не распечатывали эти избыточные статистические данные. "': Удалить 'System.out.println' в методах суперкласса 'FP'. – SubOptimal

ответ

0

Избавьтесь от всех ваших println заявлений и использовать printStats рутинную что-то вроде

void printStats() { 
    System.out.println("A Standard fighting pokemon's stats are:\n" + 
     "weight: " + weight() + "\n" + ... 
1

Большинство (если не все) ваши функции называют супер. Поскольку каждая реализация имеет оператор System.out.println(...), ваш выход забивается.

Как правило, вызов метода overriden в классе super не требуется, если он содержит определенную логику, которая также является частью кода перезаписи.

Есть несколько вещей, которые вы можете сделать, чтобы очистить свой код. Для начала сделайте класс FP abstract. (Вероятно, вы также можете переименовать класс в FightingPokemon только для удобства чтения.) Создание абстрактного класса предотвратит его создание.Вы не хотите делать экземпляры FightingPokemon, так как это просто суперкласс, содержащий логику для всех покемонов. Вам нужны только примеры фактического покемонов, таких как Машоп и Мачо.

Во-вторых, вы должны удалить все код System.out.println. Замените это на реализацию toString в каждом классе, который печатает всю информацию за один раз. Это также позволит вам отделить печать этих статистических данных от вызова функций.

Смежные вопросы