1,类成员的访问修饰符
●类只能使用默认访问修饰符和public,而类的成员可以使用全部四种访问修饰符,它们分别是public,protected,默认访问,private。
●protected,默认访问修饰的成员,在同一个包中都是可以访问的,唯一的区别是,protected修饰的成员在包外的子类中也可以访问。但需要注意的是你不能在子类中new父类的实例来访问父类中受保护的成员。
●包外子类继承父类的保护成员,那么该成员对于该子类以外的代码都是不可见的。注:书上说该子类的子类也是可以访问父类中的protected修饰的成员,但我实际试验了下,不能访问啊。
package A;
public class WrappedString {
protected void printSys() {
System.out.println("Sys");
}
}
public class WrappedString {
protected void printSys() {
System.out.println("Sys");
}
}
package B;
import A.WrappedString ;
public class WrappedString2 extends WrappedString {
public static void main(String[] args) {
new WrappedString().printSys();//编译不通过
new WrappedString2().printSys();//编译通过
}
}
import A.WrappedString ;
public class WrappedString2 extends WrappedString {
public static void main(String[] args) {
new WrappedString().printSys();//编译不通过
new WrappedString2().printSys();//编译通过
}
}
package B;
import A.WrappedString;
public class WrappedString3 extends WrappedString2{
public static void main(String[] args) {
new WrappedString2().printSys();//编译不通过
new WrappedString3().printSys();//编译通过
}
public void dd(){
printSys();//编译通过
}
}
import A.WrappedString;
public class WrappedString3 extends WrappedString2{
public static void main(String[] args) {
new WrappedString2().printSys();//编译不通过
new WrappedString3().printSys();//编译通过
}
public void dd(){
printSys();//编译通过
}
}
吃饭回来,继续。。。
●其他:访问修饰符不可以用于局部变量,这将不会通过编译的,事实上,只有final可以用于局部变量。
2,类成员的非访问修饰符
2.1,final
●final修饰方法时,该方法不能在子类中重写。
●final修饰形参(也叫变元,即方法声明中圆括号中的变量)时,该变量在方法中不能再被赋值。
2.2,abstract
●抽象类的具体子类必须实现所有的抽象方法。
●抽象方法是以;结尾的。
●abstract和final,abstract和private,abstract和static不能一起使用修饰一个方法。
2.3,synchronized
●只能用于修饰方法。
2.4,native
●表明此方法是与平台有关的语言实现的本地方法,只能用于修饰方法。
2.5,strictfp
●表明浮点数遵循IEEE754标准,只能用于类和方法。2.6,可变参数列表
public void printSys(int x, String...str) {
System.out.println("sys");
}
System.out.println("sys");
}
其中的
String...str称为可变参数列表。
●一个方法的参数列表中只能有一个可变参数列表,并且只能是最后一个参数。
本文依然未完待续。。。需要工作了。。。