Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.0.89] |
|
Сообщ.
#1
,
|
|
|
у меня возник ещё один вопрос. Судя по всему, у меня по какой то причине не совсем верно работает instanceof - не могу понять, в чём проблема.
interface Product { String MAKER = "My Corp"; static final String PHONE = "555-123-4567"; static final String ADRESS = "High str., 222, 334"; public int getPrice(int id); public void showName(); } interface Present extends Product { public void showDate(); } class Shoe implements Product { public int getPrice(int id) { if (id == 1) return(5); else return(10); } public void showName() { System.out.println("I'm a shoe!"); } } class Toy implements Present { public int getPrice (int id) { if (id == 0) return (100); else return (150); } public void showName() { System.out.println("I'm a toy!"); } public void showDate() { System.out.println("Prodused 20.01.05"); } } class Book implements Product { public int getPrice(int id) { if (id == 1) return(20); else return(30); } public void showName() { System.out.println("I'm a book!"); } } class Store { static Shoe hightop; static Book using_java; static Toy m; public static void init() { hightop = new Shoe(); using_java = new Book(); m = new Toy(); } public static void main(String argv[]) { init(); Product[] arr = new Product[3]; arr[0] = new Shoe(); arr[1] = new Book(); arr[2]= new Toy(); for (int i=0; i<3; i++) { if (arr[i] instanceof Product) orderInfo(arr[i]); else //if ((Present) arr[i] instanceof Present) getData((Present)arr[i]); // ни в одном из вариантов метод getData не вызывается...не понятно почему } } public static void orderInfo(Product item) { item.showName(); System.out.println("Name of Corp: " + item.MAKER); System.out.println("To order from " + item.MAKER + " " + " send mail to " + " " + item.ADRESS + " or call " + item.PHONE ); System.out.println("Each item costs $" + item.getPrice(1)); } public static void getData(Present item) { item.showDate(); } } Эта тема была разделена из темы "массив обЪктов" |
Сообщ.
#2
,
|
|
|
Цитата Nort0n @ Судя по всему, у меня по какой то причине не совсем верно работает instanceof - не могу понять, в чём проблема. Нет, instanceof работает верно. Все проверяемые с помощью этого оператора объекты являются реализациями вашего интерфейса Product. |
Сообщ.
#3
,
|
|
|
Да, но Toy определён как объект интерфейса Present
Добавлено поэтому выборка по ифу должна вызывать метод интерфейса Present. Но не вызывает почему то. Результат: I'm a shoe! Name of Corp: My Corp To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567 Each item costs $5 I'm a book! Name of Corp: My Corp To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567 Each item costs $20 I'm a toy! Name of Corp: My Corp To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567 Each item costs $150 Добавлено а должен быть I'm a shoe! Name of Corp: My Corp To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567 Each item costs $5 I'm a book! Name of Corp: My Corp To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567 Each item costs $20 I'm a toy! Name of Corp: My Corp To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567 Each item costs $150 Prodused 20.01.05 |
Сообщ.
#4
,
|
|
|
Цитата Nort0n @ Да, но Toy определён как объект интерфейса Present Да, но, в свою очередь, интерфейс Present является наследником Product. Поэтому instanceof Product для любой реализации Present вернёт true. |
Сообщ.
#5
,
|
|
|
хорошо, поставлю вопрос иначе.
Как мне реализовать цикл так, чтобы воспользоваться методом (showDate) Toy (который как раз не вызывается) с помощью instanceof ? |
Сообщ.
#6
,
|
|
|
Цитата Nort0n @ Как мне реализовать цикл так, чтобы воспользоваться методом (showDate) Toy (который как раз не вызывается) с помощью instanceof ? Проверять, является ли объект экземпляром Present в первую очередь или сравнивать классы точно: object.getClass() == Present.class |
Сообщ.
#7
,
|
|
|
Цитата Проверять, является ли объект экземпляром Present в первую очередь ТОЧНО! и как мне в голову не пришло...сижу, туплю. спасибо ! |