JavaRush /Blog Jawa /Random-JV /Tingkat 24. Wangsulan pitakonan wawancara babagan topik t...
zor07
tingkat
Санкт-Петербург

Tingkat 24. Wangsulan pitakonan wawancara babagan topik tingkat

Diterbitake ing grup
Level 24. Wangsulan pitakonan wawancara babagan topik level - 1
  1. Kelas internal anonim dikompilasi kanggo apa?

    Kelas batin anonim dikompilasi dadi внешнийКласс$n.class. Ing panggonan kelas njaba, miturut jeneng kelas framing, ing ngendi kelas njero anonim diterangake. Ing panggonan n iku nomer saka 1 kanggo nomer kelas anonim.

  2. Apa bisa oleh warisan kelas batin?

    Bisa diwenehi warisan kelas batin saka wong liya.

    Warisan saka kelas njero rada rumit tinimbang biasane, amarga konstruktor kelas njero digandhengake karo referensi menyang obyek njaba sing ana ing saubengé. Masalah iku referensi obyek "didhelikake" saka kelas njaba enclosing kudu initialized, lan ora ana maneh standar enclosing obyek ing kelas asalé. Kanggo kanthi jelas nuduhake obyek eksternal sing nutup, sintaks khusus digunakake:

    //: 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);
      }
    }

    Ing kene kelas kasebut InheritInnermung ngluwihi kelas njero lan dudu kelas njaba. Nanging nalika nggawe konstruktor, konstruktor standar sing diwenehake ora cocok lan sampeyan ora bisa mung ngliwati referensi menyang obyek eksternal. Sampeyan kudu nyakup ekspresi ing awak konstruktor linkНаОбъемлющийКласс.super();. Bakal nyedhiyakake link sing ilang lan program bakal dikompilasi.

  3. Apa bisa oleh warisan kelas batin anonim?

    Kanthi njlèntrèhaké kelas anonim, kita wis warisan saka sawetara kelas utawa ngleksanakake sawetara antarmuka. Tembung ngluwihi utawa ngleksanakake ora bisa langsung Applied kanggo kelas anonim, nanging ora ana siji bothers sampeyan nyiyapake ing advance lan ngluwihi antarmuka sing dibutuhake, kang bakal kita ngleksanakake nggunakake kelas anonim. Conto ing kode ing ngisor iki.

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

    Sampeyan ora bisa oleh warisan saka kelas anonim.

  4. Apa bisa ngilangi kelas batin?

    Overriding kelas njero kaya-kaya cara liya saka kelas njaba ora ana pengaruhe:

    //: 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();
      }
    }

    Kesimpulan:

    New Egg()
    Egg.Yolk()

    Konstruktor standar disintesis kanthi otomatis dening compiler lan nelpon konstruktor standar saka kelas dhasar. Sampeyan bisa uga mikir yen nalika nggawe obyek, BigEggkelas "overridden" kudu digunakake Yolk, nanging iki ora kaya ngono, kaya sing bisa dideleng saka asil program kasebut.

    Conto iki mung nuduhake yen sampeyan entuk warisan saka kelas njaba, ora ana sing khusus kedadeyan ing kelas njero. Loro kelas njero minangka entitas sing kapisah, kanthi spasi jeneng independen. Ing tembung liyane, iku mokal.

  5. Apa watesan saka kelas lokal?

    Kaping pisanan, ayo elinga apa kelas lokal. Iki minangka kelas sing diterangake ing blok kode, yaiku, kanthi istilah sing gampang - antarane kuotasi {}. Paling asring kuotasi kasebut minangka awak saka metode kasebut. Nanging bisa uga mung blok, blok statis, awak if-s, puteran, lsp.

    Kelas lokal nduweni ciri-ciri kelas internal, nanging nduweni ciri khas, yaiku:

    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. Сколько у класса максимально может быть внутренних классов?

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

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION