首先了解概念:
在java中有四種權限修飾符:范圍從大到小分別是:public、protect、default(friendly)、private,它們之間的區別是:
- public: Java語言中訪問限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
- protect: 介於public 和 private 之間的一種訪問修飾符,一般稱之為“保護形”。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
- default: 這個訪問權限可能是很多人容易所忽視的,即不寫任何關鍵字。默認權限(同包權限)即:包內可訪問,包外不可訪問,不管是子類還是沒有繼承關系的類。
- private: 只能在當前類中使用,外部不能訪問。
理解:什么是同包與不同包?
這很好理解啊,假如把包看成文件夾,包里面的東西就是文件,在同一個文件夾里面文件的就是同包,看代碼:
1 package a: 2 //function1聲明在a包中 3 public class function1{ 4 //聲明的變量與方法; 5 } 6 package b; 7 //function2聲明在b包中 8 public claass function2{ 9 //聲明的變量與方法; 10 }
首先說同包,先看一個表(打勾的表示可以訪問):
作用域 |
當前類 |
子孫類 |
外部類 |
public |
√ |
√ |
√ |
protected |
√ |
√ |
× |
Default(friendly) |
√ |
√ |
√ |
private |
√ |
× |
× |
結論:在同一個包的前提下,在繼承時,子類只能繼承父類中的public、protected以及default訪問權限的成員變量或方法,並且繼承之后,這些成員變量或方法的訪問權限和之前的一樣,如父類中是public,繼承后還是public。
在不同包的情況下,看表:
作用域 |
當前類 |
子孫類 |
外部類 |
public |
√ |
√ |
√ |
protected |
√ |
√ |
× |
Default(friendly) |
√ |
× |
× |
private |
√ |
× |
× |
結論:在不同包的前提下,在繼承時,子類只繼承父類中的public和protected訪問權限的成員變量或方法作為子類自己的成員變量或方法。