java学习日志(五)-- 一个可爱的访问控制符实验

下课前,老师给我们布置了一道作业,大意是这样的:

定义A、B、C、D、E(名称自定)四个类,满足下列条件:

(1)B类与A类同包,不是A类子类。

(2)C类与A类同包,是A类的子类。

(3)D类与A类不同包,是A类的子类。

(4)E类与A类不同包,不是A类子类。

观察当A类方法前的访问控制符分别为public/private/protected/default时,其余类是否能调用该方法。

按照老师这个要求,分别定义Mom(母亲)、Dad(父亲)、Son(儿子)、Daughter(女儿)、SonInLow(女婿)五个类,每个类单独放在一个源文件中,他们的具体定义及之间的关系如下。因为没有必要new对象,所以五个类中属性和方法均用static修饰。

说了这是一个可爱的访问控制符实验,所以下面会有一些可爱的剧情,各位观众,好戏开始。

参演人员介绍:

Mom类(对应题中A类)

类说明:一个贤惠的妻子,一位伟大的母亲。常常会给家里人做吃的(cookDishes),家务活一个人包揽(washClothes),常常很晚才休息(goSleep),一颗心全放在了孩子身上,给孩子营造课了良好的生活环境(home.one)。但最近遇上更年期,有时会因小事跟家人吵架(quarrel)。

package home.one; 

public class Mom{
	private static String name = "Mom";
	public static void main(String[] args){

	}
	/**
	Mom给某人烹饪了一桌好菜
	@param name 吃货
	*/
	public static void cookDishes(String name){
		System.out.println("Mom为" + name +"烹饪了一桌好菜");
	}
	/**
	Mom与某人吵架
	@param name 吵架对象
	*/
	protected static void quarrel(String name){
		System.out.println("Mom和" + name + "吵架了");
	}
	/**
	Mom为某人洗衣服
	@param name 衣服的所有者
	*/
	static void washClothes(String name){
		System.out.println("Mom把" + name + "的衣服洗了");
	}
	/**
	Mom睡觉
	*/
	private static void goSleep(){
		System.out.println("Mom开始睡觉");
	}
}


Dad类(对应题中B类)

类说明:Dad和Mom很恩爱,执子之手,与子偕老,他们共同构建了一个美满的家庭(home.one)。

package home.one;

public class Dad{
	private static String name = "Dad";
	public static void main(String[] args){
		
	}
}


Son类(对应题中C类)

类说明:是妈亲生的(extends Mom),不是马路边捡的,所以长得像妈。因为姐姐嫁人了,加上自己还是单身狗,所以暂时和妈住在一起(home.one)。

package home.one;

public class Son extends Mom{
	private static String name = "Son";
	public static void main(String[] args){
	
	}
}

Daughter类(对应题中的D类)

类说明:人都说她遗传了妈妈的好基因(extends Mom),人长得美,还顾家。后来遇到了那个他(SonInLow),组建了自己的家庭(home.two)。

package home.two;
import home.one.Mom;

public class Daughter extends Mom{
	private static String name = "Daughter";
	public static void main(String[] args){

	}
}


SonInLow类(对应题中的E类)

类说明:一次偶遇,让他找到了自己的幸福与余生的呵护(Daughter),他发誓要让妻子和孩子过上幸福的生活(home.two),所以每天都很努力的工作。

package home.two;
import home.one.Mom;

public class SonInLaw{
	private static String name = "SonInLaw";
	public static void main(String[] args){
	}
}


剧情一:化妆时间 -- 编译

文本编辑器是EditPlus,配置后可以编译运行带包类,不知道怎么配置,可参考我的另一篇博文EditPlus中实现Java带包的类编译运行(两种方法)

先编译Mom,后编译其余四个类。编译后各个类在文件中的位置如图。



两个家庭home.one与home.two(两个package)


Mom、Dad、Son住在一起(同包)


Daughter和SonInLaw住在一起(与Mom不同包)




剧情二:做饭 -- Mom做的一手好菜,谁有这个口福呢

调用Mom类中方法:cookDishes(String name) --> 方法访问控制修饰符:public

在Mom(母亲)、Dad(父亲)、Son(儿子)、Daughter(女儿)、SonInLow(女婿)五个类的main方法中加入Mom.cookDishes(name)


Mom(本类):


Dad(同包类):



Son(同包子类):



Daughter(不同包子类):



SonInLow(不同包类):


总结:Mom说她手艺很好,所以不管是客人(不同包类)还是家人(同包类,子类),只要饿了,她都会为他们做上一桌好菜。(访问权限为public)


剧情三:吵架 -- 是谁惹怒了Mom

调用Mom类中方法:quarrel(String name) --> 方法访问控制修饰符:protected

在Mom(母亲)、Dad(父亲)、Son(儿子)、Daughter(女儿)、SonInLow(女婿)五个类的main方法中加入Mom.quarrel(name);编译运行。


Mom(本类):



Dad(同包类):



Son(同包子类):



Daughter(不同包子类):



SonInLow(不同包类):



总结:Mom有时会因为自己不小心而埋怨自己(本类),有时也会因一些小事和家里人(同包类)或儿女(子类)吵架(访问权限为protected),但和SonInLow(不同包类)吵不起来,因为SonInLow就没那个胆。


剧情四:洗衣服 -- Mom会给谁洗衣服

调用Mom类中方法:washClothes(String name) --> 方法访问控制修饰符:default/无

在Mom(母亲)、Dad(父亲)、Son(儿子)、Daughter(女儿)、SonInLow(女婿)五个类的main方法中加入Mom.washClothes(name)


Mom(本类):



Dad(同包类):



Son(同包子类):



Daughter(不同包子类):



SonInLow(不同包类):



总结:Mom看见家里(同包类,同包子类)有脏衣服就会拿去洗(访问权限为protected),但Daughter(不同包类)和SonInLow(不同包子类)没和她住在一起,所以就不用帮他们洗衣服。


剧情五:睡觉-- 谁能替Mom休息

调用Mom类中方法:goSleep() --> 方法访问控制修饰符:private

在Mom(母亲)、Dad(父亲)、Son(儿子)、Daughter(女儿)、SonInLow(女婿)五个类的main方法中加入Mom.goSleep();编译运行。


Mom(本类):



Dad(同包类):



Son(同包子类):



Daughter(不同包子类):



SonInLow(不同包类):


总结:Mom当然只能自己替自己(本类)休息(访问权限为private)。

观后感:综合上面四个场景,果然当妈妈的儿子最幸福了。



The end:写了这么多,是想让大家更轻松的记住,实际上用下面的话及表格就可以简单表示。

Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符。

private(当前类访问权限): Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类访问,其子类不能访问,更不能允许跨包访问。
default(包访问权限):即不加任何访问修饰符。该模式下,只同一个包中的类进行访问。
protected(子类访问权限): 一般称之为“保护的”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。同包类亦可访问。
public(公共访问权限): Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包访问。

访问控制级别表
 privatedefaultprotectedpublic
本类
同包类 
子类  
不同包类   


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值