小编Luc*_*lio的帖子

为什么Android布局中的Fragment元素用小写'f'编写?

所有其他元素都以大写字母开头,如RelativeLayout,TextView等.

是否有一个特殊的原因可以将Fragment元素用作<fragment ... />代替<Fragment ... />

android android-layout android-xml android-fragments

8
推荐指数
1
解决办法
309
查看次数

为什么Java不允许我执行这种类型的多态/继承?

我正在重构一个巨大的if语句.我发现改进它的方法之一是使用多态和继承.以非常简单的方式,这是我在我的代码中所拥有的:

public abstract class Animal {  
    public abstract void doAction();  
}

public class Dog extends Animal {  
    public void doAction() {System.out.println("run");} 
}

public class Cat extends Animal {  
    public void doAction() {System.out.println("sleep");}
}

public class RunActions {  
    public void runAction(Dog d) {
        d.doAction();
    }

    public void runAction(Cat c) {
        c.doAction();
    }
}

public class Start {
    public static void main(String args[]) {
        Animal animal = new Dog();
        new RunActions().runAction(animal); // Problem!
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我知道.我可以调用animal.doAction();. 或者在RunActions中添加一个接收Animal作为参数的方法.

但为什么编译器不允许我调用最后一个"runAction(animal)"行?JVM不应该弄清楚动物是运行时Dog的一个实例吗?

是否有特定原因导致我不允许这样做?

编辑:忘了让狗和猫延伸动物.固定.

java polymorphism inheritance

2
推荐指数
1
解决办法
390
查看次数