示例情形: 我有一個電視抽象超類。兩個子類從它繼承。這兩個子類都有工廠方法來創建自己的遙控器。 Remote是一個超類,它有兩個子類。遙控器能夠改變他們各自的電視頻道(在這種情況下,三星遙控器應與任何三星電視工作)。如何在不使用實例或getClass的情況下檢查對象的類型()
遠程類有一個changeChannel方法接入電視和頻道。我的問題是,有沒有一種方法可以保持當前的方法和參數的層次結構,而不必爲遠程使用條件邏輯,只能改變自己品牌電視的頻道。我已經提供了下面的代碼。你可以確保一個共同的API共存型層次結構可能可以共享代碼&該API,但仍然只能用自己的特定實現工作
import java.util.*;
public abstract class Television{
private int channel;
public abstract Remote makeRemote();
public int getChannel(){
return channel;
}
public void setChannel(int c){
channel=c;
}
}
import java.util.*;
public class SamsungTelevision extends Television{
private int channel;
public Remote makeRemote(){
return new SamsungRemote();
}
}
import java.util.*;
public class SonyTelevision extends Television{
private int channel;
public Remote makeRemote(){
return new SonyRemote();
}
}
import java.util.*;
public abstract class Remote{
public abstract void changeChannel(Television t,int channel);
}
import java.util.*;
public class SamsungRemote extends Remote{
public void changeChannel(Television t,int channel){
t.setChannel(channel);
System.out.println("Samsung: Channel has been switched");
}
}
import java.util.*;
public class SonyRemote extends Remote{
public void changeChannel(Television t,int channel){
t.setChannel(channel);
System.out.println("Sony: Channel has been switched");
}
}
import java.util.*;
public class Driver{
public static void main(String[] args){
Television t = new SamsungTelevision();
Television t1 = new SonyTelevision();
Remote r=t.makeRemote();
r.changeChannel(t,35);
System.out.println("Samsung current channel: " + t.getChannel());
r.changeChannel(t1,37);
System.out.println("Sony current channel: " + t1.getChannel());
}
}
*而不必使用條件邏輯的遙控器只能改變自己品牌的電視頻道*? No. –
有幾種方法可以解決這個問題。如果你通過一臺不同製造的電視機,你是否在尋找會導致編譯時錯誤的東西?你有多少可以混淆現有的類? – augray
當前的代碼很好。你爲什麼需要這張支票?如果你想知道從哪個代碼獲得執行的className,可以使用一個只記錄日誌的方法:this.getClass()。getSimpleName(); –