Java中private , public , protected 几个关键字

本文介绍了Java中的private和protected关键字的使用方法及区别。通过示例讲解如何利用private关键字限制类的实例化,并探讨protected如何在继承结构中提供对方法的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、关键字 private 

class Sundae {
	private Sundae() {}
	static Sundae makeASundae() {
		return new Sundae();
	}
}

public class IceCream {

	public static void main(String[] args) {
		//!	Sundae sundae = new Sundae()	// 构造器是“私有”的,不能这么访问
		Sundae sundae = Sundae.makeASundae();
		System.out.println(sundae);
	}
}

这个例子向我们证明了使用private 的方便:有时可能想控制对象的创建方式,并防止有人直接访问一个特定的构建器
(或者所有构建器)。在上面的例子中,我们不可通过它的构建器创建一个Sundae 对象;相反,
必须调用makeASundae()方法来实现(注释③)。
③:此时还会产生另一个影响:由于默认构建器是唯一获得定义的,而且它的属性是private,所以可防止
对这个类的继承。


2、关键字 protected 

public class Cookie {

	public Cookie() {
		System.out.println("Cookie construct");
	}
	
	void foo() {
		System.out.println("foo");
	}
}

public class ChocolateChip extends Cookie{

	public ChocolateChip() {
		System.out.println("ChocolateChip constructor");
	}
	
	public static void main(String[] args) {
		ChocolateChip x = new ChocolateChip();
		//! x.foo();	// 不能访问 foo
	}
}

对于继承,值得注意的一件有趣的事情是倘若方法foo()存在于类Cookie 中,那么它也会存在于从Cookie继承的所有类中。当类Cookie和类ChocolateChip不在同一个包下时,不能访问foo()方法(同一个包下可以)。当然,亦可将其变成public。但这样一来,由于所有人都能自由访问它,所以可能并非我们所希望的局面。若象下面这样修改类Cookie:
public class Cookie {

	public Cookie() {
		System.out.println("Cookie construct");
	}
	
	protected void foo() {
		System.out.println("foo");
	}
}

将方法foo()的访问控制权限设置为 protected 时候,Cookie的子类就能在外部包访问foo()方法了。
x.foo();   就不会报错了。
这个时候方法 foo() 方法并不是公开的(public)。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值