在java语言中抽象类和接口各自的优点的使用方向?
在java语言中抽象类和接口都能申明一个未定义的方法,留给它们的继承接口或对象实现,只是在那种情况下那种使用更好?...
在java语言中抽象类和接口都能申明一个未定义的方法,留给它们的继承接口或对象实现,只是在那种情况下那种使用更好?
展开
2个回答
展开全部
个人观点,
一、抽象类可以附加逻辑。甚至是在抽象类的逻辑中调用虚方法,这样相当于我只是规定好子类要这么做,但具体子类怎么做我可以先不管。
举个例子:做一个游戏,里面有很多职业,每种职业的攻击过程都差不多,但实现都不同。
1.猎人:检查箭的数量->如果有箭则攻击
2.魔法师:检查魔法值->如果魔法值大于当前魔法所需要的魔法值则攻击
那就可以有个Character类:
Class Character{
//这2个类只是规定了大概要做什么,具体做什么子类中实现。
public void abstract boolean prepareAtt();
public void abstract void doAttack(Character ch);
//这个函数直接调用了虚函数,所以子类中只要正确的实现了上面2个虚函数就能正确执行这个方法。
public void attack(Character character){
if(prepareAtt()){
doAttack(character);
}
}
}
二、接口的优势在于一个类能实现多个接口。
三、使用方向
严格来说这个仁者见仁。有个说法可以参考下:
1.如果是具体某种事物,比如上例中的角色(职业) 就用抽象类
2.如果是某种属性,比如 能用魔法、能飞行 等用接口。
再次声明只是一种说法,初学者可以先这样思考。
一、抽象类可以附加逻辑。甚至是在抽象类的逻辑中调用虚方法,这样相当于我只是规定好子类要这么做,但具体子类怎么做我可以先不管。
举个例子:做一个游戏,里面有很多职业,每种职业的攻击过程都差不多,但实现都不同。
1.猎人:检查箭的数量->如果有箭则攻击
2.魔法师:检查魔法值->如果魔法值大于当前魔法所需要的魔法值则攻击
那就可以有个Character类:
Class Character{
//这2个类只是规定了大概要做什么,具体做什么子类中实现。
public void abstract boolean prepareAtt();
public void abstract void doAttack(Character ch);
//这个函数直接调用了虚函数,所以子类中只要正确的实现了上面2个虚函数就能正确执行这个方法。
public void attack(Character character){
if(prepareAtt()){
doAttack(character);
}
}
}
二、接口的优势在于一个类能实现多个接口。
三、使用方向
严格来说这个仁者见仁。有个说法可以参考下:
1.如果是具体某种事物,比如上例中的角色(职业) 就用抽象类
2.如果是某种属性,比如 能用魔法、能飞行 等用接口。
再次声明只是一种说法,初学者可以先这样思考。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询