J2SE_访问权限(public, protected, default, private)

时间:2021-05-02 15:07:52

一、四种访问权限简介

1)public: 公共访问权限,不管在本类,本包,子类,不同包中都可以访问被public修饰的属性和方法

2)protected: 包级访问权限,在本包中和其他包的子类中可以访问

3)default: 包级访问权限,在本包中可以访问,出了本包都是非法的

4)private: 类级访问权限,只有在本类可以访问,出了本类都是非法的

二、简图

J2SE_访问权限(public, protected, default, private)

三、示例代码

1)类A

四种不同访问权限的方法

package com.wbf.test1;

public class A {
public void pub(){
System.out.println("...public...");
}
protected void pro(){
System.out.println("...protected...");
}
void def(){
System.out.println("...default...");
}
private void pri(){
System.out.println("...private...");
}
}
2)类B

与A类同一个包,不是A的子类。除了private方法不可以方法,其他的都可以。

package com.wbf.test1;

//与A类同一个包,不是A的子类
public class B {
public static void main(String args[]){
A a = new A();
a.pub(); //pub()为A的public方法
a.pro(); //pro()为A的protected方法
a.def(); //def()为A的default方法
//a.pri(); //pri()为A的private方法
}
}
3)类C

与A不同包,不是A的子类。除了public方法可以访问,其他的都不可以。

package com.wbf.test2;

import com.wbf.test1.A;

//与A不同包,不是A的子类
public class C {
public static void main(String args[]){
A a = new A();
a.pub(); //pub()为A的public方法
//a.pro(); //pro()为A的protected方法
//a.def(); //def()为A的default方法
//a.pri(); //pri()为A的private方法
}
}
4)类A1

与A同包,是A的子类。除了private方法不可以访问,其他的都可以。

package com.wbf.test1;

import com.wbf.test1.A;

//与A同包,是A的子类
public class A1 extends A {

public static void main(String[] args) {
A a = new A();
a.pub(); //pub()为A的public方法
a.pro(); //pro()为A的protected方法
a.def(); //def()为A的default方法
//a.pri(); //pri()为A的private方法

A1 a1 = new A1();
a1.pub();
a1.pro();
a1.def();
//a1.pri();
}
}
5)类A2

与A不同包,是A的子类。

通过子类A1可以访问从父类继承来的public和protected方法,default和private方法不可以访问。

通过父类A来访问自身的方法,发现只有public方法可以访问,因为其他3中方法的访问权限都是在包级以内的,出了包,就不可以访问了。

package com.wbf.test2;

import com.wbf.test1.A;

//与A不同包,是A的子类
public class A2 extends A {

public static void main(String[] args) {
A a = new A();
a.pub(); //pub()为A的public方法
//a.pro(); //pro()为A的protected方法
//a.def(); //def()为A的default方法
//a.pri(); //pri()为A的private方法

A2 a2 = new A2();
a2.pub();
a2.pro();
//a2.def();
//a2.pri();
}
}
四、小结

1)default和protected都是包级访问权限,出了包就都不可以方法。但是protected属性或方法可以在不同包的子类中访问。

2)从thinking in java和 core java中都可以看出,子类继承了父类的所有属性和方法,只不过private属性和方法的访问级别是类级别,出了本类就无法访问了。