Java类中属性的权限级别有哪些?

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类中公共级别的属性。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java,如果需要定义一个类属性或类方法,应该使用关键字`static`来修饰。使用`static`修饰的属性或方法属于类本身,而不是属于类的任何一个对象,因此可以通过类名直接访问,而无需创建对象。同时,类属性和类方法可以被所有对象共享,这也是使用`static`修饰符的主要原因之一。除此之外,还可以使用`public`或`private`等访问修饰符来限制类属性或类方法的访问权限。 ### 回答2: 在Java,如果需要定义一个类属性或类方法,应使用"static"修饰符。 对于类属性,也称为静态变量,它是属于整个类的,而不是类的某个实例对象。通过使用"static"修饰符,可以在类中定义一个公共的属性,该属性在类的所有实例对象之间共享,并且可以通过类名直接访问而无需创建实例对象。 对于类方法,也称为静态方法,它是独立于实例对象的方法。通过使用"static"修饰符,可以在类中定义一个与类关联的公共方法,该方法可以直接被类名调用,而无需通过实例对象调用。 使用"static"修饰符的类属性和类方法具有以下特点: 1. 不依赖于实例对象的创建,可以直接通过类名调用; 2. 可以被类的所有实例对象共享,修改一处将影响所有实例对象的访问。 3. 类属性被所有实例对象共享,但每个实例对象可以有自己的实例属性。 4. 类方法不能直接访问非静态的实例变量和非静态方法,只能访问静态属性和静态方法。 总之,当需要在Java定义一个类属性或类方法时,应使用"static"修饰符来标识该属性或方法。这样,可以实现对类的整体控制,并且可以方便地通过类名直接访问属性和调用方法。 ### 回答3: 在Java,如果需要定义一个类属性或类方法,应使用"static"修饰符。 在Java,类属性是指在整个类中共享的变量,而不是每个对象独有的属性。在定义类属性时,使用"static"修饰符可以将变量声明为静态变量。静态变量由所有类的对象共享,它们属于类本身而不是类的特定对象。可以通过类名直接访问静态变量,并且在内存只存在一份副本。 类方法也被称为静态方法,它是一种属于类本身而不是类的实例的方法。类方法可以通过类名直接调用,而不需要创建类的实例。定义类方法时,同样要使用"static"修饰符。 总结起来,使用"static"修饰符可以将属性或方法声明为类级别的,而不是实例级别的。这样可以节省内存空间,并且可以通过类名直接访问或调用,而不需要创建对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值