JavaRush /Blog Java /Random-VI /Các lớp lồng nhau, cục bộ và ẩn danh
WhatNick
Mức độ

Các lớp lồng nhau, cục bộ và ẩn danh

Xuất bản trong nhóm
Chúc mọi người một ngày tốt lành! Tôi bắt đầu tìm hiểu sâu hơn về các loại lớp và viết mã chứa lớp đó. Lớp này chứa một phương thức main()và một lớp lồng nhau tĩnh. Một lớp lồng nhau tĩnh chứa một phương thức. Phương thức này tạo ra một lớp cục bộ. Lớp cục bộ có một phương pháp tạo ra một lớp ẩn danh của lớp đóng khung (tôi thực sự nghi ngờ rằng những hành vi sai trái như vậy xảy ra trong thực hành lập trình, nhưng vì lợi ích thể thao thuần túy, tôi quyết định tỏ ra thông minh, vì vậy xin đừng ném đá. Trước thời điểm đó, trong mọi trường hợp). Đơn giản hóa nó trông như thế này: Các lớp lồng nhau, cục bộ và ẩn danh - 1
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
Mục tiêu: tạo một biến trong một lớp ẩn danh bằng cách sử dụng một siêu lớp có khung và “ném” đối số của biến này vào lớp bên trong, gán nó cho biến lớp bên trong tương ứng. Dưới đây là mã được mở rộng một chút, kèm theo bản phác thảo của tôi.
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);
    }
}
Vấn đề: phương thức int doInnerThings()Tôi không thể gán innerValuegiá trị của biến localInnerValue" từ lớp cục bộ cho biến của phương thức này LocalInner. Tôi rất vui được trợ giúp! :)
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION