Как определить абстрактные методы в абстрактном классе с использованием шаблонов проектирования, в то время как некоторые методы методов будут доступны переопределить или изменить его поведение в дочерних классах? В этом примере public abstract class GameCharacter
имеют метод attack
, который должен быть похож на шаблон (определите некоторые из методов в GameCharacter
и некоторые из них пусты, чтобы быть переопределенными в дочерних классах).Определить абстрактный класс с абстрактными методами в стиле дизайна шаблона
public abstract class GameCharacter{
public void attack(GameCharacter opponent){
while(opponent.hitPoints > 0 && this.hitPoints > 0){
// some abstract method which behavior can be *redefined*
//if specific class is *overrides*
// some of this functions
// it should be pattern design
public void doDamageToOpponent{
doAttackOne(){ .... }; // cannot change
doAttackTwo(); // can change, be overridden in child class
}
public void doDamageToThis{ // counterattack
doAttackOne(){ .... }; // cannot change
doAttackTwo(); // can change, be overriden in child class
}
}
Почему * защищенный абстрактный doAttackTwo(); * защищен? –
'protected' означает, что только этот класс GameCharacter и все его подклассы могут получить доступ к этому методу, поэтому он« защищен »от доступа из других точек вашего кода. Если вы этого не хотите, вы можете объявить их как «public»; в этом случае вы можете вызывать оба метода из каждой точки вашего кода. В общем, может быть разумным только разрешить доступ к членам, если вам действительно нужно это сделать, поэтому я использовал 'protected' вместо' public'. – Anthales
Защищенный также может быть доступен из любых классов в одном пакете, даже если они не являются подклассом GameCharacter. – assylias