Promosyon
Unibersidad ng Java
Pag-aaral
Mga kurso
Mga gawain
Mga Survey at Pagsusulit
Mga laro
Tulong
Iskedyul
Internship
Komunidad
Mga gumagamit
Forum
Chat
Mga artikulo
Mga kwento ng tagumpay
Aktibidad
Mga pagsusuri
Mga subscription
Banayad na tema
Artikulo
  • Mga pagsusuri
  • Tungkol sa atin
  • CS50
Magsimula
Simulan ang pag-aaral
  • Mga artikulo
  • Mga may-akda
  • Lahat ng grupo
  • Listahan ng Lahat ng Artikulo
JavaRush /Java Blog /Random-TL /Antas 24. Mga sagot sa mga tanong sa panayam sa antas ng ...
zor07
Antas
Санкт-Петербург
  • 28 February 2021
  • 306 views
  • 0 comments

Antas 24. Mga sagot sa mga tanong sa panayam sa antas ng paksa

Nai-publish sa grupo
Telegram
Уровень 24. Ответы на вопросы к собеседованию по теме уровня - 1
  1. Ano ang pinagsama-sama ng mga anonymous na panloob na klase?

    Ang mga hindi kilalang panloob na klase ay pinagsama-sama sa внешнийКласс$n.class. Bilang kapalit ng panlabas na klase, nang naaayon, ay ang pangalan ng framing class, kung saan inilalarawan ang anonymous na panloob na klase. Sa lugar n ay isang numero mula 1 hanggang sa bilang ng mga hindi kilalang klase.

  2. Posible bang magmana ng mga panloob na klase?

    Posibleng magmana ng mga panloob na klase mula sa iba.

    Ang pamana mula sa isang panloob na klase ay medyo mas kumplikado kaysa karaniwan, dahil ang constructor ng panloob na klase ay nauugnay sa isang reference sa nakapalibot na panlabas na bagay. Ang problema ay ang "nakatagong" object reference ng nakapaloob na panlabas na klase ay dapat na masimulan, at wala nang default na nakapaloob na bagay sa nagmula na klase. Upang tahasang ipahiwatig ang nakapaloob na panlabas na bagay, ginagamit ang isang espesyal na syntax:

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

    Dito pinalawak lamang ng klase InheritInnerang panloob na klase at hindi ang panlabas. Ngunit pagdating sa paglikha ng isang constructor, ang default na constructor na ibinigay ay hindi angkop at hindi ka maaaring basta-basta magpasa ng isang reference sa isang panlabas na bagay. Dapat mong isama ang isang expression sa katawan ng constructor linkНаОбъемлющийКласс.super();. Ito ay magbibigay ng nawawalang link at ang programa ay mag-compile.

  3. Posible bang magmana ng mga hindi kilalang panloob na klase?

    Sa pamamagitan ng paglalarawan sa isang hindi kilalang klase, nagmamana na kami mula sa ilang klase o nagpapatupad ng ilang interface. Ang mga salitang extend o ipinapatupad ay hindi maaaring direktang ilapat sa mga hindi kilalang klase, ngunit walang sinuman ang nag-abala sa iyo na maghanda nang maaga at palawigin ang kinakailangang interface, na ipapatupad namin gamit ang isang hindi kilalang klase. Isang halimbawa sa code sa ibaba.

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

    Hindi ka maaaring magmana mula sa isang hindi kilalang klase.

  4. Posible bang i-override ang mga panloob na klase?

    Ang pag-override sa panloob na klase na parang isa pang paraan ng panlabas na klase ay talagang walang epekto:

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

    Konklusyon:

    New Egg()
    Egg.Yolk()

    Ang default na constructor ay awtomatikong na-synthesize ng compiler at tinatawag ang default na constructor mula sa base class. Maaari mong isipin na kapag lumilikha ng isang bagay, BigEggisang "overridden" na klase ang dapat gamitin Yolk, ngunit hindi ito ang kaso, tulad ng makikita mula sa resulta ng programa.

    Ipinapakita lang ng halimbawang ito na kapag nagmana mula sa isang panlabas na klase, walang espesyal na nangyayari sa mga panloob na klase. Ang dalawang panloob na klase ay ganap na magkahiwalay na mga entity, na may mga independiyenteng namespace. Sa madaling salita, imposible.

  5. Ano ang mga limitasyon ng mga lokal na klase?

    Una, tandaan natin kung ano ang lokal na klase. Ito ay isang klase na inilarawan sa isang bloke ng code, iyon ay, sa mga simpleng termino - sa pagitan ng mga quote {}. Kadalasan ang mga quote na ito ay ang katawan ng pamamaraan. Ngunit maaari rin silang isang bloke, isang static na bloke, isang katawan ifng -s, mga loop, atbp.

    Ang lokal na klase ay pinagkalooban ng mga tampok ng mga panloob na klase, ngunit may mga natatanging tampok, katulad:

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

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

Java-университет
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Matuto
  • Курси програмування
  • Pagpaparehistro
  • Kurso sa Java
  • Tulong sa Mga Gawain
  • Pagpepresyo
  • Mga Proyekto sa Laro
Komunidad
  • Mga gumagamit
  • Mga artikulo
  • Forum
  • Chat
  • Mga Kwento ng Tagumpay
  • Aktibidad
kumpanya
  • Tungkol sa atin
  • Mga contact
  • Mga pagsusuri
  • FAQ
  • Suporta
JavaRush Ang JavaRush ay isang online na kurso para sa pag-aaral ng Java programming mula sa simula. Ang kursong ito ay isang perpektong paraan upang makabisado ang Java para sa mga nagsisimula. Naglalaman ito ng 1200+ na gawain na may agarang pag-verify at isang mahalagang saklaw ng teorya ng Java fundamentals. Upang matulungan kang magtagumpay sa edukasyon, nagpatupad kami ng isang hanay ng mga tampok na motibasyon: mga pagsusulit, mga proyekto sa pag-coding, nilalaman tungkol sa mahusay na pag-aaral at karera ng developer ng Java.
Sundan mo kami
Ang mga Programmer ay Ginawa, Hindi Ipinanganak © 2025 JavaRush
I-download ang App
  • Google Play
  • App Store
Mastercard Visa
Ang mga Programmer ay Ginawa, Hindi Ipinanganak © 2025 JavaRush