2015-02-07 4 views
0

У меня есть суперкласс, который определяет некоторые подклассы. У меня есть другой класс, который имеет метод, которому будет передан параметр объекта, который расширяет суперкласс. Если тип объекта установлен в суперкласс, можете ли вы передать подкласс для метода? Извините, если это не имеет смысла. Я могу добавить код в качестве примера. Заранее спасибоМожет ли тип объекта быть определен супер классом?

EDIT:

public class Unit { 
    some code. 
} 

public class Infantry extends Unit { 
    some code. 
} 

public class DamageCalculator { 

public double calculateDamage(Unit unit, double damage) { 
    Some code. 
} 

Если я передать объект типа пехоты, будет компилятор выдаст ошибку, что объект пехота не единицы типа?

+1

доля кода, гораздо проще говорить кода, чем слова;) – MrSimpleMind

+1

Нет не будет, это то, что полиморфизм. – plalx

+0

Видя, как вы уже написали код, почему бы не попытаться скомпилировать его и ответить на собственный вопрос? –

ответ

2

Ваш пример будет скомпилирован просто отлично. Так как экземпляр Infantry является типом Unit, вы можете передать его методу calculateDamage. Компетент будет рад этому. Любые методы расчетаDamage calls на unit вызовут соответствующий метод для Unit или Infantry, если они были переопределены в подклассе. Это называется «полиморфизм времени выполнения». не

public class Unit { } 

public class Infantry extends Unit { } 

public class DamageCalculator { 

    public double calculateDamage(Unit unit, double damage) { 
     return damage; // presumably return unit.getStrength() * damage; 
    } 

} 

public class Main { 
    public static void main(String [] a) { 
     Unit i = new Infantry(); 
     DamageCalculator damageCalculator = new DamageCalculator(); 
     double damage = 0.1; 
     double result = damageCalculator.calculateDamage(i, damage); 
    } 
} 
+0

Я понимаю, однако, можно ли приспособить свой ответ к коду, представленному в моем отредактированном ответе? Благодарю. – Jared

+0

Прошу прощения, мой первоначальный ответ я неправильно понял ваш вопрос. Я исправил свой ответ выше. – bhspencer

+0

спасибо. – Jared