java类的访问权限问题(public default private protected)

      java中的访问权限有四种 : private default  protected public (权限依次增大)

   

  1. private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
  2. default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
  3. protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
  4. public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
  
 本类本包跨包子类不同包的非子类
private    
default √  
protected 
public

      第一种:private

                    访问权限最小;  只能在本类中使用(可以在本类中的内部类使用。。。)

代码 1 (本类使用情况)

<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="java">package java2实用教程练习;


class Person {
<span style="white-space:pre">	</span>private String name;


<span style="white-space:pre">	</span>public Person(String name) {
<span style="white-space:pre">		</span>this.name = name;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public String tell() {
<span style="white-space:pre">		</span>return this.name;
<span style="white-space:pre">	</span>}
}


public class Demo1 {
<span style="white-space:pre">	</span>public static void main(String args[]) {
<span style="white-space:pre">		</span>Person per = new Person("Victent");
<span style="white-space:pre">		</span>System.out.println(per.tell());
<span style="white-space:pre">		</span>per.name = "赝品!!!";
<span style="white-space:pre">	</span>}
}
  在上面的代码中类Person中的name属性的访问权限是私有的  也就说只能不在本类中使用。其中的构造方法可以直接的在类的内部对name进行赋值,这就是在类的内部进行赋值。  但是在Demo主类中就不能修改name的属性,是因为这不是类的内部了。是别的类了。。。。。。 

代码2(本类的内部类中使用)

package java2实用教程练习;

class Outer {
	private String name = "Victent";
	class Inner {
		public String tell() {
			return name;
		}
	}
}
public class Demo1 {
	public static void main(String args[]) {
		Outer out = new Outer();
		Outer.Inner inner = out.new Inner();
		System.out.println(inner.tell());
	}
}
</pre>在上面的代码中内部类inner直接返回了外部类中的name属性,也就是说可以子类也可以使用。。。。</p><p>         <span style="color:#ff0000;">第二种:default </span>只能够在本包中使用,比刚才的private权限稍微的大了一些。一个包可以有很多的文件的,这个时候就可以不用直接的导包就能实现了。。。。</p><p>    当然deault(默认的,不用写就行)自然可以在本类以及本类的子类中使用了。就不写代码赘述了。</p><p>代码2.1 (Demo1.java)<pre name="code" class="java">package java2实用教程练习;

class Person {
	String name;

	Person(String name) {
		this.name = name;
	}

	public String tell() {
		return this.name;
	}
}
代码2.2(Demo2.java)
package java2实用教程练习;


public class Demo2 {
<span style="white-space:pre">	</span>public static void main(String args[]) {
<span style="white-space:pre">		</span>Person per = new Person("Victent");
<span style="white-space:pre">		</span>System.out.print(per.tell());
<span style="white-space:pre">	</span>}
}

上面的两段代码放在一个文件中,先编译第一个之后再编译第二个。
在代码中可以看出来,在第二段代码中可以直接的访问第一段代码的Person类中的属性name 。
      第三种:protected 比default权限还要大点。可以在不同包的子类中使用。
代码3.1
package java2实用教程练习;

class Person {
	  protected String name;

}
代码3.2 
package javapractice;
import java2实用教程练习.*;
class Plice extends Person{
	public Plice(String name){
		 super.name  = name ;
	}
	public void getTell(){
		System.out.print(super.name);
	}
}
public class Demo70 {
	public static void main(String[] args) {
      Plice plice = new Plice("Victent") ;
      plice.getTell();
	}

}
第二段代码可以直接的使用第一段代码中的name属性。
      第四种:public 权限是最大的权限。随便用~~  就不写代码了。。。。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值