概述
Java中一个类的属性可以分为四个权限级别,分别为:private(私有级)、protected(受保护级)、无前缀(默认级)、public(公共级)。
可能你会以为protected(受保护级)是权限等级最高的级别,但是实际上private(私有级)的权限级别是最高的。
大致的权限高低如下(由高到低):
private>无前缀>protected>public
具体的权限是这样的:
同包中的子类 | 同包中的非子类 | 非同包中的子类 | 非同包中的非子类 | |
---|---|---|---|---|
private | ✔ | \ | \ | \ |
protected | ✔ | ✔ | ✔ | \ |
默认的 | ✔ | ✔ | \ | \ |
public | ✔ | ✔ | ✔ | ✔ |
接下来让我们看一看具体是什么情况
首先建立一个父类(代码如下):
package znoop.znoop10.text;
public class Person {
//public 公共级
public String name;
//默认级
int age;
//protected 受保护级
protected long phonenumber;
//private 私有级
private String address;
public Person(){
this.name="红桃杰克";
this.age=20;
this.phonenumber=01420152342;
this.address="浙江省";
}
public Person(String name,int age,long phonenumber,String address){
this.name=name;
this.age=age;
this.phonenumber=phonenumber;
this.address=address;
}
public void say(){
System.out.println("姓名:"+this.name);
System.out.println("年龄:"+this.age);
System.out.println("手机号:"+this.phonenumber);
System.out.println("地址:"+this.address);
}
}
然后建立一共同包中的子类(代码如下):
package znoop.znoop10.text;
//Person类同包中的子类
public class Student extends Person{
public int grade;
public Student() {
super();
}
public Student(int grade) {
super();
this.grade = grade;
this.name="张三";
this.age=18;
this.phonenumber=123;
this.address="泽园五号楼";
}
}
输入第二个代码我们可以看到有格式错误,这说明同包中的子类并不能继承父类的private级别的属性。
那么怎么才能跨越权限级别输出和修改父类中的属性呢?
这里我们以private为例,我们可以在父类中分别建立public级别的set和get(在一种添加如下代码):
public String getAddress(){
return this.address;
}
public void setAddress(String address){
this.address=address;
}
这样就可以在其他类中通过调用public级别的set和get来对父类中private级别的属性进行输出和修改。
在同包中创建一个非子类:
package znoop.znoop10.text;
public class InDemo {
public static void main(String[] args){
Person p1=new Person();
System.out.println(p1.name);
System.out.println(p1.age);
System.out.println(p1.phonenumber);
//System.out.println(p1.address);
System.out.println(p1.getAddress());
}
}
通过这串代码我们可以明显看到它和同包中的子类一样无法直接调动Person类中private级别的属性address,但是可以通过public级别的get方法输出属性address。
下面是非同包中的子类:
package znoop.znoop10;
import znoop.znoop10.text.Person;
public class Teacher extends Person{
public String office;
public Teacher(String office) {
super();
this.office = office;
this.name="时崎狂三";
this.age=18;
this.phonenumber=2346;
this.address="加息留";
this.setAddress("加息留");
}
}
输入这串代码后会发现非同胞中的子类无法调用Person类中默认级和private级的属性。
最后让我们建立一个非同胞中的非子类:
package znoop.znoop10;
import znoop.znoop10.text.Person;
public class OutDemo {
public static void main(String[] agrs){
Person p2=new Person();
System.out.println(p2.name);
System.out.println(p2.age);
System.out.println(p2.phonenumber);
System.out.println(p2.getAddress());
}
}
我们发现在非同包中的非子类里面我们只能调用Person类中公共级别的属性。
最后
以上就是纯真彩虹为你收集整理的Java类中属性的权限级别有哪些?的全部内容,希望文章能够帮你解决Java类中属性的权限级别有哪些?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复