Vì vậy, chúng tôi cóKhông thể truy cập phương pháp được bảo vệ từ lớp con
public abstract class A{
protected abstract String f();
}
public class B extends A{
protected String f(){...}
}
public class C extends A{
protected String f(){
A b = (A) Class.forName("B", true, getClass().getClassLoader()).newInstance();
return b.f();
}
này không cho phép tôi để truy cập b.f()
, nói rằng B.f()
là trong phạm vi bảo vệ, tuy nhiên f
được bảo vệ bởi A
, và kể từ khi C
mở rộng A
, nó cũng sẽ có quyền truy cập vào f()
.
Tại sao không tạo thể hiện mới như: A b = (A) mới B(); ? – Dmitry
B chỉ có sẵn khi chạy. Nếu bạn thực sự muốn biết, B là 'com.android.okhttp.HttpsHandler' và A là' URLStreamHandler' –
Bạn có thể giải quyết trường hợp của mình thông qua phản ánh, nhưng sẽ hữu ích hơn nếu bạn đăng sự cố * ban đầu * của mình. Phương thức 'HttpsHandler' nào bạn đang cố gắng gọi và tại sao bạn cần nó. Xem [vấn đề XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Cân nhắc việc mở một câu hỏi mới với vấn đề ban đầu của bạn. –