JavaRush /جاوا بلاگ /Random-SD /ليول 24. ليول جي موضوع تي انٽرويو سوالن جا جواب
zor07
سطح
Санкт-Петербург

ليول 24. ليول جي موضوع تي انٽرويو سوالن جا جواب

گروپ ۾ شايع ٿيل
ليول 24. ليول جي موضوع تي انٽرويو سوالن جا جواب - 1
  1. گمنام اندروني ڪلاس ڇا گڏ ڪن ٿا؟

    گمنام اندروني طبقن ۾ مرتب ٿيل آهن внешнийКласс$n.class. ٻاهرئين طبقي جي جاءِ تي، مطابق، فريمنگ ڪلاس جو نالو آهي، جنهن جي اندر اندر گمنام طبقو بيان ڪيو ويو آهي. جاءِ ۾ n ھڪڙو نمبر آھي 1 کان گمنام طبقن جي تعداد تائين.

  2. ڇا اهو ممڪن آهي ته اندروني طبقن جو وارث؟

    اهو ممڪن آهي ته اندروني طبقن کي ٻين کان ورثي ۾.

    اندروني طبقي کان وراثت عام کان ٿورو وڌيڪ پيچيده آهي، ڇاڪاڻ ته اندروني طبقي جو تعمير ڪندڙ ڀرسان ٻاهرئين اعتراض جي حوالي سان لاڳاپيل آهي. مسئلو اهو آهي ته بند ٿيل ٻاهرئين طبقي جي "لڪيل" اعتراض جو حوالو لازمي طور تي شروع ڪيو وڃي، ۽ نڪتل طبقي ۾ هاڻي ڪو به ڊفالٽ بند ٿيل اعتراض نه آهي. واضع طور تي ظاهر ڪرڻ لاء ٻاهرئين اعتراض کي ظاهر ڪرڻ لاء، هڪ خاص نحو استعمال ڪيو ويندو آهي:

    //: innerclasses/InheritInner.java
    // Наследование от внутреннего класса.
    
    class WithInner {
      class Inner {}
    }
    
    public class InheritInner extends WithInner.Inner {
      //! InheritInner() {} // He компorруется
      InheritInner(WithInner wi) {
        wi.super();
      }
      public static void main(String[] args) {
        WithInner wi = new WithInner();
        InheritInner ii = new InheritInner(wi);
      }
    }

    هتي طبقو InheritInnerصرف اندروني طبقي کي وڌائي ٿو نه ٻاهرئين طبقي کي. پر جڏھن اھو ٺاھيندڙ ٺاھڻ لاءِ اچي ٿو، مهيا ڪيل ڊفالٽ ٺاھيندڙ موزون نه آھي ۽ توھان آسانيءَ سان ڪنھن بيروني شئي جو حوالو پاس نٿا ڪري سگھو. توھان کي لازمي طور تي ٺاھيندڙ جي جسم ۾ ھڪڙو اظهار شامل ڪرڻ گھرجي linkНаОбъемлющийКласс.super();. اهو غائب لنڪ مهيا ڪندو ۽ پروگرام مرتب ڪندو.

  3. ڇا اهو ممڪن آهي ته گمنام اندروني طبقن جو وارث هجي؟

    هڪ گمنام طبقي جي وضاحت ڪندي، اسان اڳ ۾ ئي ڪنهن طبقي مان ورثي ۾ آهيون يا ڪجهه انٽرفيس کي لاڳو ڪري رهيا آهيون. لفظ Expeds يا انفارميشن سڌو سنئون گمنام ڪلاسن تي لاڳو نٿا ٿي سگهن، پر ڪو به توهان کي اڳواٽ تيار ڪرڻ ۽ گهربل انٽرفيس کي وڌائڻ جي تڪليف نه ٿو ڏئي، جنهن کي اسين هڪ گمنام ڪلاس استعمال ڪندي لاڳو ڪنداسين. هيٺ ڏنل ڪوڊ ۾ هڪ مثال.

    import java.awt.event.WindowListener;
    
    public class TestExtendAnonym {
        private interface MyInterface extends Runnable, WindowListener {
        }
    
        Runnable r = new MyInterface() {
        ...
        //Пример того How реализовать 2 и более интерфейса в анонимном классе
        };
    }

    توهان گمنام طبقي مان وارث نٿا ڪري سگهو.

  4. ڇا اندروني طبقن کي ختم ڪرڻ ممڪن آهي؟

    اندروني طبقي کي اوور رائيڊ ڪرڻ ڄڻ ته اهو ٻاهرئين طبقي جو ٻيو طريقو آهي اصل ۾ ڪو به اثر نه آهي:

    //: innerclasses/BigEgg.java
    // Внутренний класс нельзя переопределить
    // подобно обычному методу,
    import static net.mindview.util.Print.*;
    
    class Egg {
      private Yolk y;
      protected class Yolk {
        public Yolk() { print("Egg.Yolk()"); }
      }
      public Egg() {
        print("New Egg()");
        y = new Yolk();
      }
    }
    
    public class BigEgg extends Egg {
      public class Yolk {
        public Yolk() { print("BigEgg.Yolk()"); }
      }
      public static void main(String[] args) {
        new BigEgg();
      }
    }

    نتيجو:

    New Egg()
    Egg.Yolk()

    ڊفالٽ تعمير ڪندڙ خود بخود مرتب ڪندڙ طرفان ٺھيل آھي ۽ بنيادي ڪلاس مان ڊفالٽ ٺاھيندڙ کي سڏيندو آھي. توهان شايد اهو سوچيو ته هڪ اعتراض ٺاهي، BigEggهڪ "اوور رائيڊ" ڪلاس استعمال ڪيو وڃي Yolk، پر اهو ڪنهن به صورت ۾ ناهي، جيئن پروگرام جي نتيجن مان ڏسي سگهجي ٿو.

    هي مثال صرف اهو ڏيکاري ٿو ته جڏهن توهان هڪ ٻاهرئين طبقي مان ورثي ۾ آهيو، اندروني طبقن لاء ڪجهه خاص نه ٿيندو. ٻه اندروني طبقا مڪمل طور تي الڳ الڳ ادارا آهن، آزاد نالن سان. ٻين لفظن ۾، اهو ناممڪن آهي.

  5. مقامي طبقن جون حدون ڇا آهن؟

    پهرين، اچو ته ياد رکون ته مقامي ڪلاس ڇا آهي. ھي ھڪڙو ڪلاس آھي جيڪو ڪوڊ جي ھڪڙي بلاڪ ۾ بيان ڪيو ويو آھي، اھو آھي، سادي اصطلاحن ۾ - quotes جي وچ ۾ {}. گهڻو ڪري اهي حوالا طريقا جو جسم آهن. پر اهي پڻ ٿي سگهن ٿا صرف هڪ بلاڪ، هڪ جامد بلاڪ، هڪ جسم ifجو -s، لوپس وغيره.

    مقامي طبقو اندروني طبقن جي خاصيتن سان نوازيو ويو آهي، پر ان ۾ مخصوص خاصيتون آهن، يعني:

    1. он имеет доступ только к финальным полям и аргументам обрамляющего метода, а также ко всем полям обрамляющего класса, в том числе приватным и статическим;
    2. локальный класс виден и может создаваться только в блоке, в котором описан;
    3. у локального класса не ставится модификатор доступа;
    4. не может иметь статических полей, методов, классов (за исключением финальных);
    5. локальный класс, объявленный в статическом блоке может обращаться только к статическим полям внешнего класса.

    Но! Начиная с Java8 мы можем обращаться в локальных классах к не финальным локальным переменным, если они не были изменены до момента инициализации класса. Также теперь стало возможным обращение к не финальным параметрам метода.

  6. Может ли анонимный внутренний класс содержать статические методы?

    Нет. У Анонимных внутренних классов, How и у внутренних классов не может быть статических полей, методов. (вспомним, что анонимные классы компorруются в обычные внутренние, а те, в свою очередь, связаны с an objectом обрамляющего класса)

  7. Можно ли создать an object внутреннего класса, если у внешнего класса только private конструктор?

    Имея подобный code:

    public class PrivateConst {
        private PrivateConst() {}
        public class InnerClass{
            public void f(){
                System.out.println("hello");
            }
       }
    }

    Напрямую, в другом классе (вне обрамляющего), конечно, создать an object InnerClass следующим способом не получится:

    PrivateConst.InnerClass priv = new PrivateConst().new InnerClass();

    Но! What если у нас есть метод, возвращающий экземпляр

    PrivateConst:public class PrivateConst {
        private static PrivateConst instance;
        private PrivateConst() {}
    
        public static PrivateConst getInstance(){
            instance = new PrivateConst();
            return instance;
        }
    
        public class InnerClass{}
    }

    В этом случае приватный конструктор нам не помеха для создания an object InnerClass. Так же мы без проблем сможем создавать его в методах и в других внутренних классах, принадлежащих PrivateConst. Ответ — можно, если Howим-либо способом нам удастся получить an object обрамляющего класса.

  8. Можно ли объявлять внутренние классы private?

    Да, можно.

    PS Обоснования так и не нашел, но на философии java встречались подобные примеры. Плюс IDE не ругается. Буду признателен за обоснование, но предположу, что в этом плане внутренний класс ничем не отличается от обычного класса.

  9. Можно ли объявлять анонимные внутренние классы private?

    Аналогично (в плане не нашел обоснования). Можно объявить private переменную от типа которой наследуется наш анонимный класс.

  10. Сколько у класса максимально может быть внутренних классов?

    Сколь угодно много. Ограничение особенности ОС и длинны имени файлов.

تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION