Java的封装性与访问控制详述(2)

ProtectedClass p;
        p = new ProtectedClass();
        // 同一包中可以直接访问ProtectedClass中的方法 printX()
        p.printX();

}
}

同一包中保护访问级别与默认访问级别一样,可以直接访问ProtectedClass的printX()方法,上述代码可以编译通过。

在不同的包中调用ProtectedClass类代码如下:

// 默认包中HelloWorld.java文件
import com.Kevin.ProtectedClass;

public class HelloWorld {

public static void main(String[] args) {

ProtectedClass p;
        p = new ProtectedClass();
        // 编译错误,不同包中不能直接访问保护方法printX()
        p.printX();

}
}

该HelloWorld.java文件与ProtectedClass类不在同一个包中,不同包中不能直接访问保护方法printX(),所以p.printX()方法无法编译通过。

在不同的包中继承ProtectedClass类代码如下:

// 默认包中SubClass.java文件
import com.Kevin.ProtectedClass;

public class SubClass extends ProtectedClass {

void display() {
        //printX()方法是从父类继承过来
        printX();                           
        //x实例变量是从父类继承过来
        System.out.println(x);             
    }
}

不同包中SubClass从ProtectedClass类继承了printX()方法和x实例变量。代码第8行是调用从父类继承下来的方法,代码第10行是调用从父类继承下来的实例变量。

提示 访问成员有两种方式:一种是调用,即通过类或对象调用它的成员,如p.printX()语句;另一种是继承,即子类继承父类的成员变量和方法。

公有访问级别任何情况下两种方式都可以;

默认访问级别在同一包中两种访问方式都可以,不能在包之外访问;

保护访问级别在同一包中与默认访问级别一样,两种访问方式都可以。但是在不同包之外只能继承访问;

私有访问级别只能在本类中通过调用方法访问,不能继承访问。

提示 访问类成员时,在能满足使用的前提下,应尽量限制类中成员的可见性,访问级别顺序是:私有级别→默认级别→保护级别→公有级别。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/86327bdf2e144a2a556f29d108a4a792.html