java面试题网

普通会员

483

帖子

9

回复

187

积分

楼主
发表于 2019-08-26 15:24:39 | 查看: 5113| 回复: 0

java访问权限

java访问权限

1、类的访问权限

类的访问权限有两种:

公共类和非公共类

使用public修饰的类为公共类,没有使用public修饰的类为非公共类

公共类的应用场景

如果这个类想要在其他包中使用就定义为公共类

非公共类只能在当前包中使用

2、类成员的访问权限

访问权限

当前类

当前包

派生类(不在当前包中)

其他包

私有的(private)

可以

默认的(没有权限修饰符)

可以

可以

受保护的(protected)

可以

可以

可以

公共的(public)

可以

可以

可以

可以

在定义类的成员时,遵循访问权限最小化的原则

如果想在任意位置都可以使用,就定义为public公共的

如果想在当前类和派生类中都可以直接使用,就定义为protected受保护的

package com.wityx.chapter01.demo02.p1;

public class Father {
	private int xx = 10;		//私有的, 只能在当前类中使用
	int yy =  20;				//默认的, 可以在当前包中使用
	protected int zz = 30;		//受保护的, 当前包/派生类中使用
	public int oo = 40;			//公共的, 任意位置
	
	//在当前类中
	public void m1() {
		System.out.println( xx );
		System.out.println( yy );
		System.out.println( zz );
		System.out.println( oo );
	}
	
}
package com.wityx.chapter01.demo02.p1;
/**
 * 测试访问当前包中Father类的成员权限
 * 	在同一个包中,可以使用默认权限/受保护权限/公共权限的成员 ,不能使用私有成员
 * @author Administrator
 *
 */
public class Test {

	public static void main(String[] args) {
		//创建Father类的对象
		Father f = new Father();
		//访问f的实例成员
		System.out.println(f.xx);  	//The field(字段/域) Father.xx is not visible(不可见), 没有访问权限
		System.out.println(f.yy);	
		System.out.println(f.zz);
		System.out.println(f.oo);
	}

}

package com.wityx.chapter01.demo02.p2;

import com.wityx.chapter01.demo02.p1.Father;

/**
 * 在p2包中, 测试访问p1包中Father类的成员权限
 * 		只能访问公共成员 
 * @author Administrator
 *
 */
public class Test02 {

	public static void main(String[] args) {
		Father f = new Father();
		
		//访问f的成员变量
		System.out.println(f.xx);  	//The field(字段/域) Father.xx is not visible(不可见), 没有访问权限
		System.out.println(f.yy);	
		System.out.println(f.zz);
		System.out.println(f.oo);
	}

}

package com.wityx.chapter01.demo02.p3;

import com.wityx.chapter01.demo02.p1.Father;
/**
 * p3包中定义Son类, 继承p1包中的Father类
 * 		子类继承了父类, 就自动拥有了父类的实例变量与实例方法
 * 		Son类从Father类继承了四个实例变量:xx,yy,zz,oo,和一个实例方法: m1()
 * @author Administrator
 *
 */
public class Son extends Father {
	//Son类从Father类继承了四个实例变量:xx,yy,zz,oo
	
	//子类的实例方法
	//因为继承,所有自动拥有, 是否能够直接使用,跟访问权限有关
	public void sm() {
		System.out.println( xx );
		System.out.println( yy );
		System.out.println( zz ); 		//受保护的
		System.out.println( oo );
	}
}

3、方法覆盖中的访问权限

访问覆盖(重写)的规则:

1)子类方法签名必须和父类方法一致, 方法签名就是方法名与参数列表

2) 子类方法的返回值类型可以和父类方法返回值类型一样, 也可以是父类方法返回值类型的子类型

3)子类方法的访问权限可以和父类方法访问权限相同,也可以比父类方法访问权限更宽泛(更大)

如果父类方法是public修饰,子类方法只能是public修饰

如果父类方法是protected修饰,子类方法可以protected/public修饰

4)子类方法的异常不能比父类方法的异常更大


文章来自www.wityx.com,转载请注明出处!原文地址http://www.wityx.com/post/1142_1_1.html


java面试题交流群:327440556

您需要登录后才可以回帖 登录 | 立即注册

java面试题网www.wuliaokankan.cnjava建站系统提供技术支持V2.1 网站地图 © 2016-2018