抽象类
public abstract class Animal {
private int id;
private String name;
public Animal(int id, String name) {
this.id = id;
this.name = name;
}}
_动物1的孩子
public class Tiger extends Animal implements Dangerous {
public Tiger(int id, String name) {
super(id, name);
} }
_动物之子2
public class Panda extends Animal implements Harmless{
public Panda(int id, String name){
super(id, name);
}}
_双属性接口
public interface Dangerous {}
public interface Harmless {}
public class Zoo {
public static <T extends Animal & Harmless> void tagHarmless(Animal animal) {
System.out.println("this animal is harmless");
}
public static <T extends Animal & Dangerous> void tagDangerous(Animal animal) {
System.out.println("this animal is dangerous");
}}
public class App {
public static void main(String[] args) {
Animal panda = new Panda(8, "Barney");
Animal tiger = new Tiger(12, "Roger");
Zoo.tagHarmless(panda);
Zoo.tagHarmless(tiger);
}}
-结果
this animal is harmless
this animal is harmless
Process finished with exit code 0
我试图用接口“危险”和“无害”来限制类“zoo”的方法。
使用代码
公共静态<t扩展动物&无害>无效标记无害(动物)。
tiger没有这个接口,所以它实际上不应该工作,是吗?但是老虎也可以加入到这个方法中。
我看不出有错。
谢谢你的帮助。
1条答案
按热度按时间vkc1a9a21#
您正在声明泛型类型参数
T
,但您的方法从未使用过它。您的方法接受Animal
参数,这意味着任何Animal
这是可以接受的。应该是:
至于你的
main
方法,则指定Panda
及Tiger
示例Animal
变量。因此,改变tagHarmless
正如我所建议的,这意味着panda
也不是tiger
变量可以传递给tagHarmless
(自Animal
不执行Harmless
).如果你改变主意
main
致:呼吁
Zoo.tagHarmless(panda);
将通过编译,并调用Zoo.tagHarmless(tiger);
不会。