private 成员访问: 表示该成员是该类的私有成员,任何类通过上面的两种方式都是不可访问的。只可以在该类的定义中使用,或者通过该类的get和set方法来访问。
这里插一点:一个类的构造函数是可以被声明为私有的,一旦该类的构造方法被声明为私有的,则必须提供一个public的方法来创建该类的实例,主要用在工厂模式和单态模式中。
另外一个需要注意的地方是:对于超类的私有方法,若在子类中出现了相同签名的方法,这不是重写。而只是刚好超类和子类的两个方法相同。其理论依据就是:子类是不能继承超类的私有方法的。
默认成员访问:
表示该类的成员在同一个包下的其他类中是可以通过上面两种方式来访问的。
protected成员访问:
这个访问权限是最麻烦的,分成两种情况来讨论:
① 当考虑一个类通过创建另一个类的实例的方式实现访问时,它产生的行为与默认权限相同,既在同一个包中的类可以相互创建实例访问。这里有一种特殊情况:就是当一个类是另一个类的子类时,如果两个类不在同一个包中,那么子类通过创建超类的实例的方式是不可以访问的,就和两个基本类的行为一样,这里不要受继承关系的影响。
② 当考虑一个类继承另一个类的成员时,当超类的成员声明为protected 的,则包内和包外的继承自它的子类都可以拥有该成员,而且对于子类来说,它通过继承拥有的成员对它来说是私有的,任何第三方的类都是不可访问的。
3、类的成员非访问权限的声明
final:final类是防止有类继承该类。final方法是防止该方法在子类中被重写。另外final 关键字可以被用在方法的参数,表示该参数是只读的: public String getThing(int number1,final number2){}
abstract:声明一个抽象方法,方法以分号结束,没有大括号。
public String setSomething(); //抽象方法
public String setSomething(){ } //实例方法
abstract 抽象方法不能被声明为private的,因为抽象方法始终需要被重写。
abstract 抽象方法不能和static同用。
synchronized:只能用于方法声明,表示方法一次只能被一个线程访问。
native:只能用于方法声明,表示该方法是用其他的语言来实现的,native的方法体必须是以;分号结束,没有方法体。
具有可变参数列表的方法:
举例:void doStuff(int... x){}
void doStuff(String str,Animal... animal){}
规则是这样的:
① 参数类型后面接省略号(...),一个空格,以及保存接收参数的数组名称
② 可变参数必须是最后一个参数,且方法中只能有一个可变参数。
● 接口的声明:
① 接口声明:与类本身的声明相同,接口隐含是abstract的,因此不能声明为final的。另外需要注意接口之间是可以多继承的,使用extends关键字。
② 接口方法的声明:接口的方法,隐含都是public和abstract的,因此接口方法不能声明为final,static,private和protected的。
注意:接口和抽象类的方法声明,其子类在实现这个方法时,不能修改方法声明的访问权限。
③ 接口常量的声明:接口内允许放置常量,因此隐含public static final的,实现接口的类不能修改接口中定义的常量的值。