成员访问与继承

类的实例变量经常被声明为private,以防止未经授权的使用或滥用.继承一个类并不会超越private访问限制.因此,尽管子类拥有其超类的所有成员,但是他依然不能访问被声明为private的超类的成员.
public class test2
{
    // @param args
    public static void main(String args[])
    {
     childClass $obj = new childClass();
     System.out.println($obj.returnInt());
    }
}
class childClass extends parentClass{}
class parentClass
{
    private int returnInt()
    {
        return 1;
    }
    
}
输出:
Description    Resource    Path    Location    Type
The method returnInt() from the type parentClass is not visible    test2.java    /javaTest/src/javaTest    line 9    Java Problem
由于returnInt()被声明为private,因此returnInt()只能被自己类中的其他成员访问,子类无权访问returnInt(),所以对returnInt()方法的应用导致了非法访问.
切记,被声明为private的类成员会保持对类私有特性,而类以外的任何代码,包含子类在内都无权访问这些私有成员.
起初,你可能会认为子类无权访问超类的私有成员这一事实是过于严格的限制,会在许多情况下妨碍私有成员的使用,然而情况并非如此.Java程序员通常使用访问器方法类访问类的私有成员:
public class test2
{
    // @param args
    public static void main(String args[])
    {
     childClass $obj = new childClass();
     System.out.println($obj.publicReturnInt());
    }
}
class childClass extends parentClass{}
class parentClass
{
    int publicReturnInt()
    {
        return returnInt();
    }
    
    private int returnInt()
    {
        return 1;
    }
    
}
问:什么时候应该把实例变量声明为private?
答:一般没有严格的规定,但是我们要坚持两个基本原则:
如果实例变量只被他所在的类中的方法使用,那么应该将其声明为private.
如果实例变量必须在某一范围之内,那么应该将其声明为private,而且只能通过访问器方法来访问.这样可以防止把无效值赋给他.