如果我们需要对类及累的成员的访问进行限制,比如不想让外界的class访问本类中的数据,或者限制范围的数据就可以使用类成员修饰符。常见的类成员修饰符有:public 、protected、private 、final等。
public :
修饰的对象:类、成员变量、成员方法。
限制: 1.修饰类时,表明该类可以被所有的其他类访问或者应用;
2.修饰成员变量或成员方法时,该被修饰的成员不仅可以被自身访问,还可以被其他类直接访问。
protected:
修饰对象:主要是成员变量、成员方法
限制: 修饰成员时,说明被修饰的成员是被保护的成员,除了可以被类自身访问外,还可以被该类的子类及该类在同一个 包中的其他类访问。
private:
修饰对象:主要是成员变量、成员方法。
限制:修饰成员时,说明该被修饰的成员只能被类自身额访问任何其他类(包括该类的子类)都不能访问该成员。
默认----default
如果一个类成员没有被public 、protected、private中的任何一个修饰,则默认是default ,说明该成员只能被该类本身和该类同一包下的其他类直接访问。
总结:
final:
修饰对象:类、成员变量、成员方法、局部变量、参数变量
限制:1.final修饰类时,表明该类是最终类,该类不希望从从自身继承出其他类,不希望进行子类的处理。
将一个类声明成final 可以提高效率,当然有利也有弊,这样就不利于类的扩展,所以程序员声明时还是要进行适当的衡量。
注意:声明成final的类,所有的方法都将默认为final方法。
2.final修饰成员方法
在两种情况下考虑使用final方法:1)防止任何继承类改变该方法的本来的目的。
2)程序执行的效率。编译器会将final方法的内容直接内嵌到调用方法的地方,省去了方法调用的繁琐过程,节省了内存开销,提高了效率。同样的有利也有弊,在final方法的方法体很大的时候,这种方法会造成程序的臃肿。
通常只有在方法的代码很少或者明确需要实现防止方法被覆盖的情况才考虑将方法设置成final。
注意:private 方法不能被访问的原因是private方法默认是final方法。
3.final修饰成员变量时
1)final修饰基本数据类型时:该数据一旦被初始化就不能被修改,及数据变成常数;
2)final修饰引用类型的变量,该变量初始化之后就不能再让其指向另一个对象了。但是注意的是引用所指向的对象的值是可以改变的。
4.final修饰参数
Java允许将参数设置成final ,这就意味着在该方法内部,我们不能改变参数应用所指向的内容。
abstract:
修饰对象:类、方法。
限制:1.abstract修饰类时,表明该类是抽象类(不能被实例化,只能作为其他类的父类)
2.abstract修饰方法时,表明该方法时抽象方法(只有方法的返回值类型、方法名、参数列表,没有方法体)
抽象类中可以包含抽象方法。