java学习记录之访问权限

public的class 可以被任何包访问,而default的 class 只能被本包下面的类访问

实际的例子

用到的两个文件,而且他们隶属于不同的package

Func.java  Main.java

Func.java

package a;
class Func {
        public static void print_info() {
                System.out.println("class Func!");
        }
}

Main.java

import a.*;
public class Main {
        public static void main(String agrs[]) {
                System.out.println("hello!");
                a.Func.print_info();
        }


}

执行结果

lydia@lydia:~/sgy/java_learn/access_permission$ javac -d . Main.java
Main.java:6: 错误: Func在a中不是公共的; 无法从外部程序包中对其进行访问
                a.Func.print_info();
                 ^
1 个错误

说明 public Main类访问不了 default 的Func类

将Func 改成public Func或者 将Main 放在同一个包(package a;)即可访问

lydia@lydia:~/sgy/java_learn/access_permission$ java a.Main
hello!
class Func!

关于访问权限的总结
在这里插入图片描述

default的变量的访问权限也是只有同一个包才能访问!

Func.java

package a;
public class Func {
        int x = 9;
        public static void print_info() {
                System.out.println("class Func!");
        }
}

Main.java


//package a;

import a.Func;
public class Main {
	public static void main(String agrs[]) {
		Func f = new Func();
		f.x = 8;
	}

	
}

编译的时候通过不了

Main.java:8: 错误: x在Func中不是公共的; 无法从外部程序包中对其进行访问
                f.x = 8;
                 ^
1 个错误

说明即便Func是public的,但是default的变量不允许不同的包访问!

扫描二维码关注公众号,回复: 9516810 查看本文章

将Main更改成 package a即可成功编译通过,并且访问这个变量!

protected的类成员变量只能被其子类所访问,且只能在子类的内部被访问!

实际的例子:

用到的两个文件,而且他们隶属于不同的package

Func.java  Main.java

Func.java


package a;
public class Func {
	protected int x = 9;
	//int x = 9;
	public static void print_info() {
		System.out.println("class Func!");
	}
}

Main.java


package b;

import a.Func;

class Sub_Func extends Func {
	void print() {
		System.out.println("Func->x:"+x);
	}
}
public class Main {
	public static void main(String agrs[]) {
		Sub_Func f = new Sub_Func();
		f.print();
		f.x = 8;
	}

	
}

执行结果

lydia@lydia:~/sgy/java_learn/access_permission$ javac -d . Main.java
Main.java:15: 错误: x 在 Func 中是 protected 访问控制
                f.x = 8;
                 ^
1 个错误

说明在不同的package,类外即便是通过子类也是访问不了protected的成员的!

去掉下面这一行语句是能够执行通过的。

f.x = 8

PS:

  1. 一个java文件里不能同时写两个public的类
发布了17 篇原创文章 · 获赞 3 · 访问量 3540

猜你喜欢

转载自blog.csdn.net/sgy1993/article/details/104547028
今日推荐