java类成员访问权限与类权限学习过程中的理解

import语句

import用于使用其他包的类。Java使用包机制来缓解类的命名冲突问题,而import关键词的出现正是Java包机制的结果。

原因如下:在没有import语句之前,使用其他包中的类需要使用某包名.某类名。存在某些包名很长的情况以及多次使用包名.类名.成员名的情况,导致代码过长。
**import语句的实质:作用在编译器阶段,补全包名。**即在使用import导入包之后,可以使用不带包名的类,而编译器编译时自动加上你省略掉的包名。

import对类的不同继承、类成员的不同访问权限,补全包名有一定限制。

类的不同访问权限:

类别import有效性
友好类无效
公有类private成员无效
公有类protected成员无效
公有类public成员有效
公有类default(友好、默认)成员无效

package sichuan:

package sichuan;
public class PublicFather {			  //公有类
	 public String PublicName;
	 public String PublicReturnName() {
	  return PublicName;
	 }
}
package sichuan;
class Father { 					 //友好类
 	public String name;
 	public String returnName() {
  	return name;
 	}
 }

package guizhou:

package guizhou;
import sichuan.*;
public class TestMain {
 	public static void main(String args[]) {
 	Father father = new Father(); 		//非法,不能导入友好类
  	father.name = "father";
  	PublicFather publicFather = new PublicFather();
  	publicFather.PublicName = "public Father";
  	String  input= publicFather.PublicReturnName();
  	System.out.printf("公有类:%s\n",input);
 	}
}

运行的结果是编译器会报错,提示:

the type Father is not visible

由于import语句不作用于没有使用public修饰的类,因此,会编译失败。

成员访问权限

public

在其他类中创建某类的对象,则该对象能访问自己的public变量和public方法。
可以说,public成员是该类所定义对象与外部的接口,对外可见。

private

被private修饰的成员只能被本类中的其他成员函数使用,对外不可见。这些成员是类的不可见结构,不允许对象使用。

package type1;
public class Type(){
	private int a;
	public int b;
	public void setA(int m){     //只能使用成员函数才能给private变量赋值
		a = m;
	};	
}
public static void main(String args[]){
	Type type = new Type();
	type.a = 12;			//非法,不能直接赋值
	type.b = 12;			//合法,变量b为公有变量;
	type.setA(12); 			//合法 
}

protected

同一个包中可以定义不同的类,在同一个包下,其他类中也可以使用该类定义的对象的友好成员。
若该类间接继承本包中的类,则可以继承被继承类的protected成员。

若某类的对象使用了其他类继承的成员,应该追溯到该成员的祖先类。仅有该祖先类和对象所在的类在同一个包下才可使用。

友好成员(default)

仅包名相同的类可使用。
同一个包中可以定义不同的类,在同一个包下,其他类中也可以使用该类定义变量的友好成员。

类继承

子类继承父类情况表

类别privateprotecteddefaultpublic
位于同包中×
位于不同包中×××

间接继承问题

若father类继承grandfather类、son类继承father类,就三个类的位置情况,son类继承情况不同,(private均不继承)如下表:

位置情况G_ protectedG_ defaultG_ publicF_protectedF_defaultF_public
三个类位于同一个包
三个类位于不同包××
grandfather和father同一个包××
grandfather和son同一个包××
father和son同一个包×

该表反映了前面提到的知识点。首先,继承允许多重继承,必定继承protect和public成员。其次,友好成员的继承与位置有关,位于同一个包中的类可继承友好成员。另外,private成员对外不可见,不能继承。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值