java中的权限修饰符_Java中的权限修饰符

java面向对象的基本思想之一是封装细节并且公开接口。Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节。访问控制分为四种级别:

(1)public: 用public修饰的类、类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问;

(2)protected: 用protected修饰的类、类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问(包外的子类可以用Super来访问),protected重点突出继承;

(3)default: 如果一个类、类属变量及方法没有用任何修饰符(即没有用public、protected及private中任何一种修饰),则其访问权限为default(默认访问权限)。默认访问权限的类、类属变量及方法,包内的任何类(包括继承了此类的子类)都可以访问它,而对于包外的任何类都不能访问它(包括包外继承了此类的子类)。default重点突出包;

(4)private: 用private修饰的类、类属变量及方法,只有本类可以访问,而包内包外的任何类均不能访问它。

(1)适用范围,如图所示:

c8be88c8f32980d13f27119b9cc7b106.png

(2)类的修饰符:public:主类。 一个文件中只能有一个主类。 主类整个项目下都可以使用。

default:其他类。不能跨包使用。

成员(变量和方法 ,本包可以使用。成员变量成员方法):public  protected  default  private

public:在整个项目下都可以使用。

default:在本包内可以使用,不能跨包。

private:只有本类可以使用。其他类都不能使用。

protected:不能跨包,但是跨包类如果是该类的子类,就可以用。用super来访问父类的成员

构造方法:

public  protected  default  private和成员的使用是一样的,没有任何区别。

例:

package com.fs.test;

import com.fs.TestAccess02;

/*为什么protected修饰的成员变量hight 可以在B类使用  A类就不行、

*

* 因为protected修饰的关键字,虽然不能跨包使用。但是可以在子类中使用。

*

* */

public class A {

public static void main(String[] args) {

//Test1是public修饰的类,是可以跨包使用的。

TestAccess02 t =new TestAccess02();

//default修饰的类,在其他包中不能使用。

//T t2 =new T();

//public修饰的成员变量age  是可以跨包使用的。

System.out.println(t.age);

//default修饰的成员变量name。 不可以跨包使用

//System.out.println(t.name);

//protected修饰的成员变量hight  不能跨包使用。

//System.out.println(t.hight);

}

}

class B extends TestAccess02{

public void method(){

//protected修饰的成员变量hight  可以在不同包子类中使用。

System.out.println(super.hight);

}

}

TestAccess02位于:package com.fs

A位于:package  com.fs.test

B 位于:package  com.fs.test,但是却是TestAccess02的子类

结论:protected修饰符所修饰的类(这句话中指父类)属成员变量和方法,只可以被子类访问,而不管子类是不是和父类位于同一个包中。default修饰符所修饰的类属成员变量和方法,只可被同一个包中的其他类访问,而不管其他类是不是该类的子类。protected属于子类限制修饰符,而default属于包限制修饰符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值