На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> Не работает instanceof
    у меня возник ещё один вопрос. Судя по всему, у меня по какой то причине не совсем верно работает instanceof - не могу понять, в чём проблема.

    ExpandedWrap disabled
      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();
      }
      }


    Эта тема была разделена из темы "массив обЪктов"
      Цитата Nort0n @
      Судя по всему, у меня по какой то причине не совсем верно работает instanceof - не могу понять, в чём проблема.

      Нет, instanceof работает верно. Все проверяемые с помощью этого оператора объекты являются реализациями вашего интерфейса Product.
        Да, но 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
        Сообщение отредактировано: Nort0n -
          Цитата Nort0n @
          Да, но Toy определён как объект интерфейса Present

          Да, но, в свою очередь, интерфейс Present является наследником Product. Поэтому instanceof Product для любой реализации Present вернёт true.
            хорошо, поставлю вопрос иначе.
            Как мне реализовать цикл так, чтобы воспользоваться методом (showDate) Toy (который как раз не вызывается) с помощью instanceof ?
              Цитата Nort0n @
              Как мне реализовать цикл так, чтобы воспользоваться методом (showDate) Toy (который как раз не вызывается) с помощью instanceof ?

              Проверять, является ли объект экземпляром Present в первую очередь или сравнивать классы точно:
              ExpandedWrap disabled
                object.getClass() == Present.class
                Цитата
                Проверять, является ли объект экземпляром Present в первую очередь


                ТОЧНО! и как мне в голову не пришло...сижу, туплю. спасибо :) !
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0405 ]   [ 14 queries used ]   [ Generated: 17.05.24, 08:06 GMT ]