java 构造函数深入学习
2008-06-02 21:44
337 查看
*来自对构造函数的继承,及相关调用思考得到,主要还是从《java面向对象编程》得来
*在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,
这可以保证子类对象从所有直接或间接父类中继承来的实例都被正确的初始化。
*当子类的构造方法没有用super语句显示的调用父类的构造方法,而父类中又没有提供默
认的构造方法(jdk提供的默认构造方法)时,将会出现编译错误。
*从上面可以得出,如果一个类即不允许其他程序员用new语句来构造它的实例,又不允许它有子类,就可以
把它所有的构造方法定义为private的。
另外一种使一个类不能有子类的方法是将类声明改为final的。
由上面可以想到用静态工厂模式:
*单例模式(singleton)
*枚举类
*具有实例缓存的类
*具有实例缓存的不可变类
*在多级继承的情况下,将从继承树的最上层的父类开始,依次执行各个类的构造方法,
这可以保证子类对象从所有直接或间接父类中继承来的实例都被正确的初始化。
*当子类的构造方法没有用super语句显示的调用父类的构造方法,而父类中又没有提供默
认的构造方法(jdk提供的默认构造方法)时,将会出现编译错误。
public class Grapha { // public Grapha() { // System.out.println("Grapha()"); // } public Grapha(String name) { System.out.println("Grapha()"); } } class Father extends Grapha{ /** * a compile error happen. * implicit super constructor Grapha() is undifined,must explicity invoke another constructor **/ public Father() { System.out.println("Father()"); } /** * a compile error happen. * implicit super constructor Grapha() is undifined,must explicity invoke another constructor **/ public Father(String name){ } }
*从上面可以得出,如果一个类即不允许其他程序员用new语句来构造它的实例,又不允许它有子类,就可以
把它所有的构造方法定义为private的。
另外一种使一个类不能有子类的方法是将类声明改为final的。
由上面可以想到用静态工厂模式:
*单例模式(singleton)
*枚举类
*具有实例缓存的类
*具有实例缓存的不可变类
相关文章推荐
- java基础知识学习之代理深入学习(用动态代理实现AOP,FacotryBean)
- java学习脚印:深入java绘图机制
- [java学习笔记]java语言核心----面向对象之构造函数
- 【Java】深入理解JVM学习笔记(一) —— JVM数据区域
- 深入学习java枚举的应用
- 深入学习理解java-ThreadLocal
- Java并发编程深入学习——Lock锁
- 深入Java集合学习系列:HashMap的实现原理
- JAVA学习第八课(构造函数及其特点+构造代码块)
- 深入Java集合学习系列:HashMap的实现原理
- JDK学习---深入理解java中的LinkedList
- Java深入学习一之部分语言规范
- 深入Java集合学习系列:ArrayList的实现原理
- 深入Java集合学习系列:LinkedHashMap的实现原理
- Java多线程高并发学习笔记(二)——深入理解ReentrantLock与Condition
- 深入Java集合学习系列:HashSet的实现原理
- 深入Java集合学习系列:LinkedHashMap的实现原理
- Hbase深入学习(六) Java操作HBase
- 深入Java集合学习系列:HashSet的实现原理
- 深入Java集合学习系列:HashMap的实现原理--转