JAVA 权限访问控制

郁闷,太久没碰 java 忘的一干二净。看到 package 和 import 之后的权限访问控制 有那么一点迷惑。

 

特意记录下来,免的后期在使用的时候又发傻

 

JAVA 中一共有四种权限

权限

类内部

同一个包

子类

任何地方

private

yes

 

 

 

default

yes

yes

 

 

protected

yes

yes

yes

 

public

yes

yes

yes

yes

 

因为设计到包,所以在使用方面有点迷惑

 

首先看 default 权限的问题

package com.net;
// 缺省权限就是 default
class Test1 {
     int i = 1;
     public int getI() {
          return i;
     }
}

 

编译后将 .class 文件放到 com/net 包下 接着在编写一个java文件


// 编译出错,无法使用 Test1 类 因为该类的权限是 default
import com.net.Test1
public class Test2 {
   public static void main(String[] args) {
         Test1 t1 = new Test1();  
   }   
}


 

当修改 Test1 类的权限为 public 后编译仍然通过。

 

在看一段代码 

import com.net.Test1;

public class Test2 {
	public static void main(String[] args) {
		Test1 t1 = new Test1();
		System.out.println(t1.i);
	}
}

 

此时编译再一次出错,因为 Test1 类中的 i 成员的权限是 default 所以无法访问。

也就是说 如果 一个类是的权限是 default 的话 那么该类只能在同一个包中能访问,该类的属性也是一样

 

第二个测试

com/net 包中有2 个 class 文件

第一个是上列的 Test1.class

第二个是新的 Test3.class

 

Test3.java 代码

package com.net;

pubic Test3 extends Test1 {
    public int getI() {
      return this.i;
    }
}


 


该类的权限是 public (任何地方都能访问) 同时继承了 同一个包下的 Test1 类 (在经过测试后发现 在同一个包中继承 不需要 import 要继承的类)

 

现在修改 Test2.java 代码

import com.net.Tes3
public Test2 {
    public static void main(String[] args) {
        Test3 t3 = new Test3();
        System.out.println(t3.getI());
    }
}

 

编译通过,能够获取 Test3 继承所得到的 i 的值。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值