JavaRush /Java Blog /Random-TL /Mga nested, lokal at anonymous na klase
WhatNick
Antas

Mga nested, lokal at anonymous na klase

Nai-publish sa grupo
Magandang araw sa lahat! Nagsimula akong maghukay ng mas malalim sa mga uri ng mga klase at isinulat ang code na naglalaman ng klase. Ang klase na ito ay naglalaman ng isang pamamaraan main()at isang static na nested na klase. Ang isang static na nested na klase ay naglalaman ng isang pamamaraan. Ang pamamaraan ay lumilikha ng isang lokal na klase. Ang lokal na klase ay may isang pamamaraan na lumilikha ng isang hindi kilalang klase ng klase ng pag-frame (Lubos akong nagdududa na ang gayong mga perversion ay nangyayari sa pagsasanay sa programming, ngunit para sa kapakanan ng purong interes sa palakasan, nagpasya akong maging matalino, kaya't mangyaring huwag magbato. Bago ang oras, sa anumang kaso). Pinasimple mukhang ganito: Mga nested, lokal at anonymous na klase - 1
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
Layunin: gumawa ng variable sa isang anonymous na klase gamit ang isang framing super class, at "ihagis" ang argumento ng variable na ito hanggang sa inner class, na itatalaga ito sa inner class na variable, ayon sa pagkakabanggit. Nasa ibaba ang isang bahagyang pinalawak na code, kasama ang aking mga sketch.
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    int outerValue = 0;

    Outer(int a)
    {
        this.outerValue = a*a;
    }

    int getValue() {
        return outerValue;
    }

    static class Inner { // ВНУТРЕННИЙ СТАТИЧЕСКИЙ КЛАСС
        public  int innerValue = doInnerThings();

        int doInnerThings() {
            final int innerValue = 0; // КАК ПЕРЕДАТЬ ЗНАЧЕНИЕ ЭТОЙ ПЕРЕМЕННОЙ ИЗ КЛАССА НИЖЕ?

            class LocalInner { // ЛОКАЛЬНЫЙ КЛАСС
                final public int localInnerValue;

                LocalInner() {
                    localInnerValue = doLocalInnerThings();
                }

                int doLocalInnerThings() {
                    final int[] localInnerAnonValue = {0};

                    new Outer(5) { // АНОНИМНЫЙ КЛАСС
                        @Override
                        int getValue()
                        {
                            localInnerAnonValue[0] = super.getValue();
                            return localInnerAnonValue[0];
                        }
                    };

                    return localInnerAnonValue[0];
                }

                int getlocalInnerValue() {
                    return this.localInnerValue;
                }
            }

            return innerValue;
        }
    }

    public static void main(String[] args) {
        Outer.Inner test = new Outer.Inner();
        System.out.println(test.innerValue);
    }
}
Problema: method int doInnerThings()I can’t assign innerValuethe value of a variable localInnerValue" from a local class to a variable of this method LocalInner. I would be glad to help! :)
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION