JavaRush /جاوا بلاگ /Random-UR /لیول 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. کیا گمنام اندرونی کلاسوں کا وارث ہونا ممکن ہے؟

    ایک گمنام کلاس کو بیان کرنے سے، ہم پہلے ہی کسی نہ کسی کلاس سے وراثت میں ہیں یا کچھ انٹرفیس کو نافذ کر رہے ہیں۔ توسیع یا نفاذ کے الفاظ کو براہ راست گمنام کلاسز پر لاگو نہیں کیا جا سکتا، لیکن کوئی بھی آپ کو پہلے سے تیار کرنے اور مطلوبہ انٹرفیس کو بڑھانے کی زحمت نہیں دیتا، جسے ہم ایک گمنام کلاس کا استعمال کرتے ہوئے لاگو کریں گے۔ ذیل کے کوڈ میں ایک مثال۔

    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