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

    xiaoxiao2021-03-25  106

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

    定义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本类√√√√同包类 √√√子类  √√不同包类   √
    转载请注明原文地址: https://ju.6miu.com/read-11129.html

    最新回复(0)