2013-12-12 53 views
2

我有兩個不同包中的類,如下所示 這是包庫中的基類。超類的受保護變量不可見於不同包中的子類

package library; 

public class Book{ 

    public int varPublic; 
    protected int varProtected; 
    private int varPrivate; 
    int varDefault; 
} 

並且這是包構建中的子類。

package building; 

import library.Book; 

public class StoryBook extends Book { 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Book book = new Book(); 
     book.varPublic = 10; 
     book.varProtected = 11; 


    } 

} 

我的理解是,變量「var.Protected」應該是在類的故事書可見,但我得到一個錯誤。我試圖從eclipse和命令提示符執行此代碼。

任何人都可以請看看在那些申報類的子類只能訪問自己的繼承protected成員其他包這

+0

this.varProtected = 11; //這會很好地工作...... – Ashish

+0

問題是相同的,但兩個代碼是不同的。在另一篇文章中,他使用這個關鍵字在構造函數中分配一個受保護的變量。但我試圖直接訪問受保護的變量引用該對象。我是java編程的初學者,我編寫的這段代碼並沒有做java教程中描述的內容。 – user3000126

回答

2

類。

public class StoryBook extends Book { 
    public StoryBook() { 
     System.out.println(this.variable); // this.variable is visible 
    } 
} 

...但不是其他對象的繼承protected成員。

public class StoryBook extends Book { 
    public StoryBook() { 
     System.out.println(this.variable); // this.variable is visible 
    } 

    public boolean equals(StoryBook other) { 
     return this.variable == other.variable; // error: StoryBook.variable is not visible 
    } 
} 

另外採取了在本文

Why a protected member of a superclass can't be accessed from a subclass by using a superclass' reference?

相關問題