1.先说说感触
Java最初的兴起,很大一部分是因为它是面向对象的语言。面向对象最大的特点便是“万事万物皆对象”,而在现实世界中,每个事物的确可以认为是一个独立的对象。将现实的问题转化为对象间的问题,再用代码描述解决问题的方法,编译成机器可以读懂的语言,最后由计算机执行得出结果,这个流程便是程序员每天的工作。
那么可以看出,程序员每天最繁重的体力劳动便是用文字表达自己的想法。这是什么行业,不就是作家吗,只不过受众是其他的作家而已。既然作家讲究文笔、修辞和意境等,程序员又该注意些什么呢?我个人觉得,能做到结构清晰,内容明确,文字简练即可(这就是代码架构出现的原因)。
2.修饰访问权限的关键字
修饰符及范围 | 类内部 | 包内部 | 子类中 | 不限制 |
---|---|---|---|---|
private | 允许 | 不允许 | 不允许 | 不允许 |
default | 允许 | 允许 | 不允许 | 不允许 |
protected | 允许 | 允许 | 允许 | 不允许 |
public | 允许 | 允许 | 允许 | 允许 |
3.访问权限在现实中的场景
有一个人姓张名平,家住北京市,手机号码是13366668888。他有一儿一女,儿子跟他一起住在北京,女儿独自住在上海。根据一般情况,我们可以确定以下四点:1.儿子和女儿都姓张;2.只有父亲名字为平;3.儿子和父亲所在地为北京;4.认识张平的人都知道他的手机号码。而与子女一样的和被人知晓的就是可访问的。
4.代码描述现象
首先新建一个项目,通过包名区分不同的城市,用Father代表张平,用Boy代表儿子,用Girl代表女儿,Main则是程序启动的入口和代表其他人。
由于名字是个人所有,所以用private修饰;而不同的城市对应不同的包名,所以用默认即可;只要是张平的孩子都姓张,所以用protected修饰;电话号码就是让别人记的,所以用public修饰。
package org.lance.beijing;
public class Father{
private String firstName = "平";
/*default*/ String address = "北京市";
protected String lastName = "张";
public String phone = "13366668888";
@Override
public String toString() {
return "Father [firstName=" + firstName + ", address=" + address + ", lastName=" + lastName + ", phone=" + phone
+ "]";
}
}
package org.lance.beijing;
public class Boy extends Father {
@Override
public String toString() {
return "Boy [firstName=" + firstName + ", address=" + address + ", lastName=" + lastName + ", phone=" + phone
+ "]";
}
}
package org.lance.shanghai;
import org.lance.beijing.Father;
public class Girl extends Father {
@Override
public String toString() {
return "Girl [firstName=" + firstName + ", address=" + address + ", lastName=" + lastName + ", phone=" + phone
+ "]";
}
}
在程序的入口处实例化这三个对象,展示每个人的基本资料。
import org.lance.beijing.Boy;
import org.lance.beijing.Father;
import org.lance.shanghai.Girl;
public class Main {
public static void main(String[] args) {
System.out.println(new Father().toString());
System.out.println(new Boy().toString());
System.out.println(new Girl().toString());
System.out.println(new Father().phone);
}
}
5.运行的结果
Boy和Girl都会报Father的成员属性不可访问的错误,说明此处不能从Father那获取。我们找到对应的变量,进行删除,那么运行的结果便是子女和其他人能从张平那访问的。