本篇参考书籍为JaveEE零基础入门/史胜辉,王春明,沈学华编著.—北京:清华大学出版社,2021.1(2022.8重印) ISBN 978-7-302-56938-1
文章目录
前言
类的访问权限
类的访问控制有public、abstract、final及friendly4种,此外有protected和private修饰类成员
一、类的访问控制
1、public类
当一个类被声明为public时,意味着这个类可以在任何包中被访问。任何其他类只要知道了这个类的全限定名(包括包名),都可以创建该类的实例或继承该类。
public class MyClass {
// ...
}
2、abstract类(抽象类)
使用abstract关键字声明的类叫做抽象类。抽象类不能被实例化,只能作为其他类的父类使用。抽象类可以包含抽象方法(没有方法体的方法),其子类必须实现这些抽象方法。
abstract class Animal {
public abstract void eat(); // 抽象方法
// 可以包含普通方法和属性
}
class Dog extends Animal{
public void eat(){
System.out.println("小狗啃骨头啦");
}
}
3、final类
用final关键字声明的类是最终类,表示该类不能被继承。同时,最终类的成员方法和属性也可以声明为final,表示它们不能被重写(对于方法)或重新赋值(对于属性)。
public final class FinalClass {
// 该类不能被继承
}
4、friendly类
没有明确指定访问修饰符(public、protected、private或默认无修饰符)的类,具有包访问权限。这类类只能在同一个包内的其他类中被访问,不在同一包内的类无法直接访问它。
class PackageFriendlyClass {
// 只能在同一包内的类中访问
}
二、类成员的访问控制
1、public
类:如果类被声明为public,那么它可以被任何类访问,包括不在同一个包内的类。
属性/方法:如果属性或方法被声明为public,那么它们可以在任何类中被访问。
2、protected
类:Java中不能直接将类声明为protected,但若类位于一个包内,其子类可以位于不同的包,子类可以访问protected修饰的父类成员。
属性/方法:如果属性或方法被声明为protected,那么它们在同一个包内的任何类以及不同包但属于该类的子类中可以被访问。
3、default
类:默认访问权限,仅限于同一个包内的其他类访问。
属性/方法:默认访问权限的属性或方法只能在同一个包内的类中访问。
4、private
类:Java中不能直接将类声明为private。
属性/方法:如果属性或方法被声明为private,那么它们只能在该类的内部访问,其他类(包括同一个包内的类和不同包的类以及子类)都不能访问。
修饰符 | 同一个类 | 同一个包 | 不同包的子类 | 不同包非子类 |
---|---|---|---|---|
private | * | |||
default | * | * | ||
protected | * | * | * | |
public | * | * | * | * |
代码示例:
package com.example;
// 默认访问权限的类
class DefaultClass {
private String privateField; // 只能在DefaultClass内部访问
protected String protectedField; // 同一包内类和不同包但属于DefaultClass子类可以访问
String defaultField; // 同一包内类可以访问
public String publicField; // 任何地方都可以访问
private void privateMethod() {} // 只能在DefaultClass内部访问
protected void protectedMethod() {} // 同一包内类和不同包但属于DefaultClass子类可以访问
void defaultMethod() {} // 同一包内类可以访问
public void publicMethod() {} // 任何地方都可以访问
}
public class PublicClass {
// 公共类的定义...
}