作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个抽象类Item
子类为 Weapon
的类Shield
和Potion
。
abstract public class Character {
private Item item;
public Character(Item item) {
this.item = item;
}
public Item getItem() {
return this.item;
}
}
public class Hero extends Character{
public Hero(Item item) {
super(item);
}
public static void main(String[] args) {
Hero h = new Hero(new Weapon("sword"));
System.out.println(h.getItem().getDamage());
/* getDamage is not known because it is not a method of the Item
class, it is a method of the Weapon class */
Hero h1 = new Hero(new Potion("syrup"));
System.out.println(h1.getItem().getPower());
/* again getPower() is not known */
}
}
我该怎么做才能this.item
返回为 Weapon/Potion...
而不是 Item
。我做了研究,发现我需要改变方法public Item getItem()
方法public <T extends Item> getItem()
或投 this.item
作为Weapon/Potion/Shield
但我不知道该怎么做。
最佳答案
abstract class Character
{
private Item item;
public Character (Item item)
{
this.item = item;
}
public <T extends Item> T getItem (Class <? extends T> targetType)
{
return targetType.cast(this.item);
}
public void setItem (Item item)
{
this.item = item;
}
}
class Hero extends Character
{
public Hero (Item item)
{
super (item);
}
public static void main(String[] args) {
Hero hero1 = new Hero(new Weapon("sword"));
Weapon weapon = hero1.getItem(Weapon.class);
hero1.setItem(new Potion("syrup"));
Potion potion = hero1.getItem(Potion.class);
}
}
关于java - 在 getter 方法中返回子类而不知道子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45466740/
我是一名优秀的程序员,十分优秀!