总结一下java 相关的权限的意思
分类 | 同一个类中 | 同一个包中 | 不同包的子类 | 不同包的非子类 |
---|---|---|---|---|
private | 〇 | |||
default | 〇 | 〇 | ||
protected | 〇 | 〇 | 〇 | |
public | 〇 | 〇 | 〇 | 〇 |
Private
private使用的样例
class Test{
public static void main(String[] args){
Person person = new Person("Daming");
System.out.println(person.name);
}
}
class Person{
private String name;
Person(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
执行上诉代码的结果如下图所示:
通过图片可以了解到private修饰属性仅能在本类中使用。
private修饰的内容也不能在子类中使用:
class Test{
public static void main(String[] args){
subPerson person = new subPerson("Daming");
}
}
class Person{
private String name;
Person(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
class subPerson extends Person{
subPerson(String name){
super(name);
}
public String ShowName(){
return name;
}
}
上诉代码表示子类中也不能继承private的变量。
default
default使用样例,default在使用的时候可以在通过一个包中使用,例如下面的代码:
package com.test.Demo;
class Person{
String name;
Person(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
public class Demo{
public static void main(String[] args){
Person person = new Person("Daming");
System.out.println(person.name);
}
}
上诉代码执行的结果如下:
但是在不同的包中的时候则会发生错误,样例代码如下:
//父类的定义
package com.test.Demo;
public class Person{
String name;
public Person(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
import com.test.Demo.Person;
class Test{
public static void main(String[] args){
Person p = new Person("Daming");
System.out.println(p.name);
}
}
当调用的类与对象的类不在一个包中的时候,则发生如下的错误:
protected
protecte实验的代码如下:(参见其他人写的代码,觉得对自己理解protected有帮助)
package com.lky.h1;
public class Base{
private Integer id;
protected String name;
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String toString(){
return "Base [id=" + id + ", name=" + name + "]";
}
}
//在同一个包中的子类
package com.lky.h1;
class Test1 extends Base{
public static void main(String[] args){
Test1 test1 = new Test1();
Base base = new Base();
base.name = "Daming";
test1.name = "hong";
System.out.println(base.name);
System.out.println(test1.name);
}
}
运行结果如下:
此时说明在同一个包中的时候,无论是父类还是子类都可以调用定义用protected修饰的变量。
下面则是在不同包中定义的子类
package com.lky.h2;
import com.lky.h1.Base;
class Test2 extends Base{
public static void main(String[] args){
Test2 test2 = new Test2();
Base base = new Base();
base.name = "Daming";
test2.name = "hong";
System.out.println(base.name);
System.out.println(test2.name);
}
}