java继承中体现的public protected private的区别

为了保护程序的安全性,java中设置了三种访问权限修饰词。那么在进行继承时,这些不同的访问权限有什么区别呢?

1.public——接口访问权限:

对于基类(父类,我更喜欢使用基类表示。)中的public的属性和方法,继承它的导出类(子类)都是可以访问的。

2.protected——继承访问权限:

在正常情况下,基类BaseClass中被protected修饰的属性和方法是不能被其它包里面的类所使用的。但是如果其它包中的类DerivedClasses是由这个BaseClass继承而来,那么类DerivedClasses是可以访问类BaseClass里面被Protected修饰的属性和方法。

3.private——你无法访问:

它的定义是:除了包含该成员的类之外,其它任何类都无法访问这个成员。那么在继承的情况下,导出类(子类)也是不能访问基类(父类)中的private的属性和方法。只能使用get和set方法来访问基类中的private成员。

4.包访问权限:

当属性或者方法前面得到权限修饰符是缺省时,表明其能被当前包中的任何类访问,而不能被其他包中的类访问。

可以看出,在继承时,与其它情况差别最大的protected 访问权限修饰词。
这四个访问的权限可以看做是不断访问升级的关系。由最小访问权限的private 不断地扩大访问权限到public。
只能在本类访问(private) —能被本包中其他类访问—》 包访问权限—能被所有继承类访问—》 protected—能在任何类中访问—》public。

下面是基类的代码:

package privateTest;

public class BaseClass {
	public  String a = "private variable of base class! ";
	protected  String b = "protected variable of base class!";
	private  String c = "public variable of base class!";
	
	public void methon1() {
		System.out.println("这是基类的public方法!");
	}
	protected void methon2() {
		System.out.println("这是基类的protected方法!");
	}
	private void methon3() {
		System.out.println("这是基类的private方法!");
	}		
}

下面是同一个包中的继承类:

package privateTest;

public class BerivedClasses extends BaseClass{
	//BerivedClasses berivedClasses = new BerivedClasses();

	public static void main(String[] args) {
		BerivedClasses berivedClasses = new BerivedClasses();
		berivedClasses.test1();
		
	}
	public void test1() {
		System.out.println(super.a);  //public     可以访问。
		System.out.println(super.b);  //protected  可以访问
		System.out.println(super.c);  //private    错误: The field BaseClass.c is not visible
		
		super.methon1();	//public     可以访问。
		super.methon2();	//protected  可以访问
		super.methon3();	//private    The method methon3() from the type BaseClass is not visible
			}
	
}

下面是不同包中的继承类:

package differentPackage;

import privateTest.BaseClass;

public class DifferentPackageClass extends BaseClass{
	public static void main(String[] args) {
		
	DifferentPackageClass differentPackageClass = new DifferentPackageClass();
	differentPackageClass.test1();	
	
}
	public void test1() {
		
		System.out.println(super.a); //public     可以访问。
		System.out.println(super.b); //protected  错误:  The field BaseClass.b is not visible
		System.out.println(super.c); //private    错误: The field BaseClass.c is not visible
		super.methon1();
		super.methon2();             //protected 可以访问!!
		super.methon3();             //private    错误: The method methon3() from the type BaseClass is not visible
		 
		//如果在子类中使用父类对象来访问时,也是不能访问父类中的protected的成员的!!!!!!
		BaseClass baseClass = new BaseClass();
		System.out.println(baseClass.a);  //public      可以访问。
		System.out.println(baseClass.b);  //protected  错误:  The field BaseClass.b is not visible
		System.out.println(baseClass.c);  //private    错误:The field BaseClass.c is not visible
		baseClass.methon1();              //public      可以访问。
		baseClass.methon2();              //protected  错误:The method methon2() from the type BaseClass is not visible
		baseClass.methon3();              //private    错误: The method methon3() from the type BaseClass is not visible
	}
}
 class DifferentPackageClass2{
	 public void test2() {
		 BaseClass baseClass = new BaseClass();
		 System.out.println(baseClass.a);    //public     可以访问。
		 System.out.println(baseClass.b);    //protected  错误:  The field BaseClass.b is not visible
		 System.out.println(baseClass.c);    //private    错误: The field BaseClass.c is not visible
	 }
 }

注意,代码中的错误部分没有删除和修改。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值