JavaRush /Java Blog /Random-KO /중첩, 로컬 및 익명 클래스
WhatNick
레벨 17

중첩, 로컬 및 익명 클래스

Random-KO 그룹에 게시되었습니다
모두에게 좋은 하루 되세요! 나는 클래스의 유형을 더 깊이 파고들고 클래스를 포함하는 코드를 작성하기 시작했습니다. 이 클래스에는 메서드 main()와 정적 중첩 클래스가 포함되어 있습니다. 정적 중첩 클래스에는 메서드가 포함되어 있습니다. 이 메서드는 로컬 클래스를 생성합니다. 로컬 클래스에는 프레이밍 클래스의 익명 클래스를 생성하는 메서드가 있습니다. (프로그래밍 실습에서 이런 변태가 발생하는지 의심스럽습니다. 하지만 순전히 스포츠적인 관심을 위해 영리하게 결정했으므로 돌을 던지지 마십시오. 어쨌든 시간 전에). 단순화하면 다음과 같습니다. 중첩, 로컬 및 익명 클래스 - 1
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
목표: 프레이밍 슈퍼 클래스를 사용하여 익명 클래스에 변수를 만들고 이 변수의 인수를 내부 클래스까지 "던지고" 내부 클래스 변수에 각각 할당합니다. 아래는 내 스케치와 함께 약간 확장된 코드입니다.
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);
    }
}
문제: 메서드 " 로컬 클래스에서 이 메서드의 변수로 변수 값을 int doInnerThings()할당할 수 없습니다 . 기꺼이 도와드리겠습니다! :) innerValuelocalInnerValueLocalInner
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION