Пример ситуации: У меня есть телевизионный абстрактный суперкласс. Наследуются два подкласса. Оба этих подкласса имеют заводские методы для создания собственных пультов. Remote - это суперкласс, и он имеет два подкласса. Пульты могут менять свой канал на телевидении (в этом случае удаленный samsung должен работать с любым телевизором Samsung).Как проверить тип объекта без использования экземпляра или getClass()
Удаленные классы имеют метод changeChannel для телевидения и канала. Мой вопрос заключается в том, что я могу сохранить эту иерархию с помощью методов и параметров, которые она имеет в настоящее время, и не использовать условную логику для удаленного, чтобы иметь возможность изменять только канал собственной марки телевидения. Я предоставил код ниже.
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());
}
}
* и не нужно использовать условную логику для пульта дистанционного управления, чтобы иметь возможность изменять только канал собственной марки телевидения *? № –
Есть несколько способов, которыми вы могли бы это сделать. Вы ищете что-то, что может привести к ошибке во время компиляции, если вы передадите Телевидение другой марки? Насколько вам разрешено общаться с существующими классами? – augray
Текущий код в порядке. Зачем вам нужна эта проверка? Если вы хотите узнать только className, из которого выполняется код, используйте один метод, который просто регистрирует: this.getClass(). GetSimpleName(); –