Java 权限修饰符

修饰符 类内部 同一个包 子类 任何地方
private yes      
package yes yes    
protected yes yes yes  
public yes yes yes yes

权限修饰符主要用来修饰成员变量方法;而只能用publicpackage(默认什么修饰词都不写)这两种权限来限定访问。说得通俗些,权限修饰符就是用于指定成员变量方法的访问权限的。java

一、修饰成员变量和方法:spa

注:pak1包下有Person和Student两个类;pak2包下有Student类code

package pak1;

public class Person {
	private int i = 0;
	int j = 0;
	protected int k = 0;
	public int m = 0;
	
	public void pub() {
		System.out.println(i);
		System.out.println(j);
		System.out.println(k);
		System.out.println(m);
	}
	
	private void pri() {
		System.out.println("private");
	}
	
	protected void pro() {
		System.out.println("protected");
	}
	
	void def() {
		System.out.println("default");
	}
}
package pak1;

public class Student {
	public void m() {
		Person p = new Person();
		
		System.out.println(p.i); //报错,i为private
		System.out.println(p.j);
		System.out.println(p.k);
		System.out.println(p.m);
		
		p.pri(); //报错,pri()为private
		p.def();
		p.pro();
		p.pub();
	}
}
package pak2;

import pak1.Person;

public class Student { //这里Student类并未继承Person类
	public void m() {
		Person p = new Person();
		
		System.out.println(p.i); //报错 i为private
		System.out.println(p.j); //报错 j为package
		System.out.println(p.k); //报错 k为protected,Student非同包,非子类
		System.out.println(p.m);
		
		p.pri(); //报错 pri()为private
		p.def(); //报错 def()为package
		p.pro(); //报错 pro()为protected,Student非同包,非子类
		p.pub();
	}
}
package pak2;

import pak1.Person;

public class Student extends Person { //这里Student继承了Person父类
	public void m() {
		Person p = new Person();
		Student s = new Student();
		
		System.out.println(p.i); //报错
		System.out.println(p.j); //报错
		System.out.println(p.k); //报错:在子类中经过父类对象引用不能访问父类中用protected修饰的k
		System.out.println(p.m);
		
		System.out.println(s.i); //报错
		System.out.println(s.j); //报错
		System.out.println(s.k); //注意:在子类中经过子类对象引用则能访问父类中用protected修饰的k
		System.out.println(s.m);
		
		System.out.println(i); //报错
		System.out.println(j); //报错
		System.out.println(k); //注意:在子类中能直接访问父类中用protected修饰的k
		System.out.println(m);
		
		p.pri(); //报错
		p.def(); //报错
		p.pro(); //报错:在子类中经过父类对象引用不能访问父类中用protected修饰的pro()
		p.pub();
		
		s.pri(); //报错
		s.def(); //报错
		s.pro(); //注意:在子类中经过子类对象引用则能访问父类中用protected修饰的pro()
		s.pub();
		
		pri(); //报错
		def(); //报错
		pro(); //注意:在子类中能直接访问父类中用protected修饰的pro()
		pub();
	}
}

固然,权限修饰符也能够用来修饰某类的构造方法,效果等同普通方法。对象

二、修饰类(public或package修饰外部类,可用全部权限修饰内部类):继承

使用包权限修饰的外部类不能被导入(import)。ci

注:pak1包下有Animal和Cat两个类;pak2包下有Cat类table

package pak1;

class Animal { //用包权限修饰Animal类
	public void speak() {
		System.out.println("wangwangwang~miaomiao");
	}
}
package pak1;

public class Cat {
	public void m() {
		Animal a = new Animal();
		a.speak();
	}
}
package pak2;

import pak1.Animal; //报错,用包权限修饰的Animal类不能被导入
import pak1.*;

public class Cat {
	Animal a = new Animal(); //报错,因为用包权限修饰的Animal类不能被导入,因此不能建立此类对象
}
相关文章
相关标签/搜索