Java编程思想(六)
访问权限控制
修饰符 | 范围 |
---|---|
public | 范围最大,共有的,不管是谁都可以用 |
protectd | 范围次之,受保护的,只能是我的子孙后代可以用 |
包权限 | 范围在次之,只能在同一个包内,才可以用 |
private | 范围最小,我的就是我的,谁都不给 |
一些使用Tips:
- 子类可以放大父类的访问权限。列如,父类的方法是protected修饰的,在子类可以把修饰符改成public。就是说,儿子从老子那里接过来的传家宝,儿子觉得这什么都不是,当什么传家宝,就公开给狐朋好友调用了。但是子类不能缩小父类的访问权限。列如:父类的方法是public修饰的,子类不能改成protected。就是说,老子已经公开了,儿子不能去抢回来当传家宝了。
- 除内部类,类的修饰符只能有public和包权限。接口申明的方法只能是public的,抽象类的抽象方法不能是private
final关键字
根据语义表达的就是“这是无法改变的”。不想改变就两个理由:设计、效率。分下面三种情况:数据,方法,和类
final数据,用来告诉编译器一块数据是恒定不变的。主要两个作用:
- 一个永不改变的编译时常量
- 一个在运行是被初始化的值,不希望程序把它改变
对于编译期常量,编译器在编译的时候,可以将该常量值带入任何可能用到它的计算式中。当final修饰的对象引用的时候,则表示对此对应引用保持恒定不变。但是这个对象本身是可以变动的。一个被final和static同时修饰的变量则表示这是一块固有的、不能改变的。
final 方法
- 锁定方法,不让子类重写
- 效率问题,但是在Java SE5版本之后已经将这部分工作转到编译器和JVM优化中。
类中所有的private方法都隐式的指定为final的。所以private方法不存在是不是final类型的方法的问题
- final类
final修饰类的时候则表示这个类不可以被继承。
类初始化顺序
我们来通过一个例子进行理解
/*** 注释里面的四位数字代表这个语句执行的位置*/
class Child {private int i = 9;protected int j;//4444private int m = printInit("Child m initialized");Child() {//5555System.out.println("i = " + i + ", j = " + j + ", m= " + m);j = 39;}//1111private static int x1 = printInit("static Child.x1 initialized");public static int printInit(String msg) {System.out.println(msg);return 47;}
}class Parent extends Child {//6666private int k = printInit("Parent k initialized");public Parent() {//7777System.out.println("k = " + k);System.out.println("j = " + j);}//2222private static int x2 = printInit("static Parent.x2 initialized");public static void main(String[] args) {//3333System.out.println("Parent constructor");Parent classOrder = new Parent();}
}
我在上面的代码标注了输出的顺序,是不是有点蒙。我们一步一步来。
1. 程序需要执行,需要加载类,所以我们需要加载Parent和Child的类。加载class的时候就会把static对象加载。然后Parent继承与Child,所以Child会先一步加载,Parent会后一步加载。当然我们也可以知道如果Child还继承与别的Class的话,别的Class肯定是先于Child类加载的。所以到现在输出了上面1111,和2222语句对应内容
2. 调用Parent的构造函数,这个没得说。3333得以输出
3. 在实例化对象的时候,会调用构造函数这没得说。那为什么不是先输出6666对应的语句,反而是4444对应的语句呢。是因为子类在构造函数的第一句执行的是调用的父类的构造函数,所以Child的构造函数会被先调用。然后4444是在成员变量块,5555是在构造函数中。所以4444,5555输出出来了。然后才轮到Parent他自己初始化。所以6666,7777语句得以输出
Java编程思想(六)相关推荐
- 【Java编程思想】读书笔记(二)第六章---第十章
Java编程思想(第四版)学习笔记 第六章---第十章 第六章:访问权限控制 6.2Java访问权限修饰词 第七章:复用类 7.1 组合语法 7.2 继承语法(extends) 7.4.2名称屏蔽(重 ...
- Java编程思想 (1~10)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象 2.程序就是对象的集合 3.每个对象都是由其它对象所 ...
- 《JAVA编程思想》学习笔记:第8章(多态)
目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...
- 《JAVA编程思想》学习笔记:第16章(数组)
目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...
- Java编程思想读书笔记(七)
点击蓝字 关注我们 今天是端午节,在这里祝大家端午节安康.过节的同时也不要忘记知识储备,今天我 为大家带来了Java编程思想第七节多形性读书笔记.请大家一起品鉴,如果发现里面有啥写的不对的地方,请大家 ...
- 《JAVA编程思想》学习笔记:第1-4章(Java概述)
全书目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章 ...
- 《JAVA编程思想》中暗藏的设计模式
文章目录 前言 一.状态模式 1. 使用场景 2. 代码引入 3. 代码解析 二.策略模式 1. 使用场景 2. 代码引入 3. 代码解析 三.工厂模式 1. 使用场景 2. 代码引入 3. 代码解析 ...
- 《JAVA编程思想》学习笔记:第21章(并发)
目录 Java编程思想(一)第1~4章:概述 Java编程思想(二)第5章:初始化和清理 Java编程思想(三)第6章:访问权限 Java编程思想(四)第7章:复用类 Java编程思想(五)第8章:多 ...
- 《Java编程思想》读书笔记一
很早之前就买了<Java编程思想>这本书,初学时看这本书看的云里雾里的,实在费劲,就放在一边垫桌底了.感觉这本书是适合C/C++程序员转行到Java学习的一本书,并不适合零基础的初学者去看 ...
最新文章
- SQL Server 2016 查询存储性能优化小结
- ise仿真添加信号_西门子TIA+PLCSIM+MCD,构建自动化仿真系统
- 浅谈Java反射机制 之 获取类的字节码文件 Class.forName(全路径名) 、getClass()、class...
- 《移动项目实践》实验报告——Android自定义控件
- 04737 c++ 自学考试2019版 第五章程序设计题 1
- dataframe转字典dict格式
- redis linux中的安装
- 管理感悟:当好主管的关键
- Java实现Map转List
- VSCode运行Java报错No delegateCommandHandler for vscode.java.resolveMainMethod
- javaSE (四十二)javaSE阶段性总结
- java醉汉_醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)
- python 拼音 英文识别_识别同音字词pypinyin, 分词 jieba
- tomcat启动成功但没有跳转到浏览器,已解决
- linux信号11sigtstp,Linux信号(signal)机制
- 数据结构与算法——数据结构知识归纳
- Hibernate学习之二-------搭建环境时应注意的地方
- 液晶屏背光源该如何检测?
- 想让微信公众号文章上“朋友圈热文”?看看这个
- Linux 下 网卡重启
热门文章
- 编写微信聊天机器人3《聊天精灵WeChatGenius》:使用Xposed来hook微信,找到微信进程。
- php股票公式,【图】请老师帮忙编写个选股公式_股票公式,选股公式,股票论坛,炒股软件,股票指标_指标编写互助答疑论坛_理想论坛 - 股票论坛...
- uc 浏览器不能打开网页
- Spherical Harmonics Lighting代码实现(续)
- 苹果3D物体捕捉Object Capture功能实现教程
- canvas实现打字输入效果
- xiunobbs装插件
- 通信工程/电子信息工程 保研夏令营/预推免流程分析
- 判断任一给定整数N是否满足条件: 它是完全平方数,又至少有两位数字相同,如144、676等。
- 机器学习常用性能度量中的Accuracy、Precision、Recall、ROC、F score等都是些什么东西?...