目录

 一、对于方法

二、对于类

三、对于属性

总结


  • Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符。

被四种访问权限符修饰后能访问的范围:

chatgpt 在java中的应用 javatpoint_子类

 一、对于方法

四种访问权限符均可修饰类中的方法。

  • 在FunctionTest包中定义一个Spoon类:
package FunctionTest;

public class Spoon {
    
    public static void printArrayPublic(String... args){
        for(String obj: args){
            System.out.print(obj.toString());
        }
        System.out.println();
    }
        
    protected static void printArrayProtect(String... args){
        for(String obj: args){
            System.out.print(obj.toString());
        }
        System.out.println();
    }
    
    static void printArrayDefault(String... args){
        for(String obj: args){
            System.out.print(obj.toString());
        }
        System.out.println();
    }
    private static void printArrayPrivate(String... args){
        for(String obj: args){
            System.out.print(obj.toString());
        }
        System.out.println();
    }
}
  • Test类表示与Spoon类在同一个包的类: 

chatgpt 在java中的应用 javatpoint_子类_02

出现错误说明 private修饰的方法不能被同一个包中的其他类(包括子类)访问。与表格一致。

  • SubSpoon类表示为Spoon类的不同包的子类

chatgpt 在java中的应用 javatpoint_修饰符_03

结果与表格一致。

 Test类表示为Spoon类的不同包的非子类

chatgpt 在java中的应用 javatpoint_子类_04

结果与表格一致。

二、对于类

只有default(不写默认指定default)和public可以修饰任何类,而且类名要与文件名相同。

  • 在classtest包中定义一个Class类、Class2类,其中Class类被public修饰、Class2类默认被default修饰:
package classtest;

public class Class {
	public Class(){
		System.out.println("Class");
	}
}
package classtest;

class Class2 {
	public Class2(){
		System.out.println("Class2");
	}
}
  • test类表示与Class类、Class2类在同一个包中的类:

chatgpt 在java中的应用 javatpoint_子类_05

未出现错误说明被public、default修饰的类可被同一个包中的其他类访问,与表格一致。

  • SubClass类表示为Class类的不同包的子类

chatgpt 在java中的应用 javatpoint_chatgpt 在java中的应用_06

 未出现错误说明被public修饰的类可被不同包的子类访问,与表格一致。

  • SubClass2表示为Class2类的不同包的子类

chatgpt 在java中的应用 javatpoint_chatgpt 在java中的应用_07

 出现错误说明被default修饰的类不能被不同包的子类访问,与表格一致。

  • test类表示为Class、Class2不同包的非子类

chatgpt 在java中的应用 javatpoint_System_08

 结果表示被public修饰的类可被不同包的非子类访问,被default修饰的类不能被不同包的非子类访问,与表格一致。

三、对于属性

  • 在ElementTest包中定义Element类:

chatgpt 在java中的应用 javatpoint_chatgpt 在java中的应用_09

  • Test类表示与Element类在同一个包中的类:

chatgpt 在java中的应用 javatpoint_chatgpt 在java中的应用_10

 出现错误说明被private修饰的属性不能被同一个包中的其他类访问,与表格一致。

  • SubElement类为Element类在不同包中的子类:

chatgpt 在java中的应用 javatpoint_chatgpt 在java中的应用_11

被protected、default、private修饰符修饰的属性在不同包中的子类中均不能被访问,与表格不一致具体原因我也不知道...)。

按照提示,可通过添加getter、setter方法来访问属性:

chatgpt 在java中的应用 javatpoint_子类_12

此时SubElement类中通过访问Element类中的公共方法getStr2()访问被protected修饰符修饰的属性

chatgpt 在java中的应用 javatpoint_修饰符_13

str3、str4同理 。

总结

通过以上测试,发现开头的表格仅针对方法(此时默认类被public修饰);

只能被public修饰符和默认修饰符(default)修饰,但访问范围仍与表格一致

对于属性public、default、private修饰的属性与表格一致protected修饰的属性最多被同一个包中的类访问,与表格有不同