[英]What are the different zlib compression methods and how do I force the default in Java's Deflater?
[英]How do i force java methods to run specific implementations
我有2個重載方法,一個運行超類,另一個運行子類。 我希望在發送子類時,java會知道運行特定於子類的方法。 唉,它運行的是超類之一。 這是一個例子:
public class Test {
static class SuperClass {}
static class SubClass extends SuperClass {}
static void stuff(SuperClass superclass) {
System.out.println("IN 1");
}
static void stuff(SubClass subClass) {
System.out.println("IN 2");
}
public static void main(String[] args) {
SuperClass aClass = new SubClass() ;
stuff(aClass) ;
}
}
我希望打印“IN 2”,但我得到“IN 1”
所以我有兩個問題:1。為什么會這樣?2。我如何實現我想要的結果?
提前致謝
通過將aClass聲明為SubClass的實例
SuperClass aClass = new SubClass() ;
即使您將其實例化為SubClass,也可以將其聲明為SuperClass。 將該行更改為:
SubClass aClass = new SubClass() ;
然后再試一次。
就像Skeet先生所說,它正在發生,因為aClass
變量的編譯時類型是SuperClass
。 以下是使用接口和instanceof
public class Legit {
public static interface Animal {}
public static abstract class Mammal implements Animal {}
public static class Lion extends Mammal {}
public static class Cow extends Mammal {}
public static abstract class Reptile implements Animal {}
public static class Snake extends Reptile {}
public static void doSomething(Animal animal) {
if (animal instanceof Lion) {
System.out.println("RAAWWRR!");
} else if (animal instanceof Cow) {
System.out.println("MOOO!");
} else if (animal instanceof Reptile) {
System.out.println("HISSSSS!");
}
}
public static void main (String ... args) {
Animal animal1 = new Lion();
Animal animal2 = new Cow();
Animal animal3 = new Snake();
doSomething(animal1);
doSomething(animal2);
doSomething(animal3);
}
}
輸出:
RAAWWRR!
MOOO!
HISSSSS!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.