JavaRush /Blog Java /Random-VI /Đóng cửa và gọi lại. Cần một số lời khuyên.
Konkistador
Mức độ

Đóng cửa và gọi lại. Cần một số lời khuyên.

Xuất bản trong nhóm
Trong chương "Các lớp bên trong" của cuốn sách của B. Eckel về chủ đề "Đóng cửa và gọi lại", ví dụ mã sau đây được trình bày: Trình //innerclasses/Callbacks.java // Использование внутренних классов // для реализации обратных вызовов package innerclasses; interface Incrementable { void increment(); } // ПРОСТО реализуем интерфейс: class Callee1 implements Incrementable { private int i = 0; public void increment() { i++; System.out.println(i); } } class MyIncrement { public void increment() { System.out.println("Другая операция"); } public static void f(MyIncrement mi) { mi.increment(); } } // Если ваш класс должен вызывать метод increment() // по-другому, необходимо использовать внутренний класс class Callee2 extends MyIncrement { private int i = 0; private void increment1() { super.increment(); i++; System.out.println(i); } private class Closure implements Incrementable { public void increment() { // Указывается метод внешнего класса, иначе // возникает бесконечная рекурсия: Callee2.this.increment1(); } } Incrementable getCallbackReference() { return new Closure(); } } class Caller { private Incrementable callBackReference; Caller(Incrementable cbh) { callBackReference = cbh; } void go() { callBackReference.increment(); } } public class Callbacks { public static void main(String[] args) { Callee1 c1 = new Callee1(); Callee2 c2 = new Callee2(); MyIncrement.f(c2); Caller caller1 = new Caller(c1); Caller caller2 = new Caller(c2.getCallbackReference()); caller1.go(); caller1.go(); caller2.go(); caller2.go(); } } biên dịch báo cáo rằng nó không thể ghi đè phương thức tăng() trong lớp Callee2. Một nỗ lực đã được thực hiện để gán các đặc quyền truy cập thấp hơn. Và điều này có thể hiểu được, trong Java trong quá trình kế thừa, chỉ có thể thay đổi các công cụ sửa đổi truy cập theo hướng dễ hiển thị hơn. Hãy cho biết tác giả muốn truyền tải điều gì? Lỗi đánh máy ở đây là ở đâu?
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION