2013-01-25 44 views
5

Ví dụ về truy cập gián tiếp tới thành viên riêng của siêu lớp từ lớp con là gì?Truy cập vào các thành viên riêng của một Superclass

Lớp lồng nhau có quyền truy cập vào tất cả các thành viên riêng của lớp học kèm theo là cả hai trường và phương pháp. Do đó, lớp học được công khai hoặc được bảo vệ được thừa kế bởi một lớp con có quyền truy cập gián tiếp vào tất cả các thành viên riêng tư của lớp học này là .

Trích từ http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

Trả lời

4

Trong báo giá, chúng ta nói về lớp "lồng"

đây là một ví dụ về cách một lớp bên trong có thể truy cập vào các lĩnh vực riêng của lớp bên ngoài.

class OuterClass { 
private int x = 7; 

public void makeInner(){ 
    InnerClass in = new InnerClass(); 
    in.seeOuter(); 
} 
class InnerClass { 
    public void seeOuter() { 
     System.out.println("Outer x is " + x); 
    } 
} 
public static void main(String[] args) { 
    OuterClass.InnerClass inner = new OuterClass().new InnerClass(); 
    inner.seeOuter(); 
} 

}

Cuối cùng, nếu bạn mở rộng một lớp học với các InnerClass, họ cũng sẽ truy cập vào các lĩnh vực riêng của OuterClass nếu InnerClass của bạn là công khai hay bảo vệ

0

Nó phải được coi (nhưng trình biên dịch không thực thi nó, chỉ cảnh báo), rằng một phương pháp private sẽ kết thúc được sử dụng bởi một phương pháp mặc định public, protected hoặc (nếu không nó là vô ích).

Vì vậy, lớp mở rộng có thể "gián tiếp" gọi phương thức private bằng cách gọi public, protected hoặc phương pháp mặc định kết thúc gọi phương thức riêng tư.

+0

Vì vậy, trong trường hợp đó nó không khác với một lớp học thường xuyên được tiếp cận với các phương pháp sửa đổi lần nào khi subclassed –

+0

Đó kiểu truy cập có thể được thực hiện bằng cách các lớp khác nữa. Câu hỏi của tôi là về trường hợp báo giá cụ thể. –

0

Vâng, chúng ta có thể truy cập vào tin các thành viên của một lớp cha trong lớp con thông qua phương thức công khai của lớp cha có thể được gọi ra từ biến tham chiếu của lớp con làm tăng id tham chiếu của lớp con. ví dụ: -

class Base 
{ 
    private int x=10; 

    void show() 
    { 
     System.out.println(x); 
    } 
} 

class Child extends Base 
{ 

    public static void main(String... s)// public static void main(String[] args) 
    {  
     //rom jdk 1.7 main can be defined like above 
     Child c=new Child(); 
     c.show(); 
    } 
} 

Đầu ra sẽ là 10

Các vấn đề liên quan