<EffectiveJava>读书笔记--01继承的使用注意

1, 父类的构造器方法中不能调用能够被子类重写的方法.

  分析:

    当初始化一个子类时, 首先要初始化父类, 即调用父类的构造方法;

    如果父类的构造方法中调用了可被重写的其它方法, 那么此时调用的其实是该子类中重写的方法;

    因此子类还没有初始化, 所以可能会造成一些问题.

    示例代码如下:

    父类:

public class Father1 {
    public Father1() {
        overRide1();
    }

    public void overRide1(){
        System.out.println("父类的成员方法..................................");
    }
}

子类:

public class Son1 extends Father1 {

    private final Date date;
    public Son1() {
        date = new Date();
    }

    @Override
    public void overRide1() {
        System.out.println(date);
    }

    public static void main(String[] args) {
        Son1 son1 = new Son1();
        son1.overRide1();
    }
}

如果运行子类的main方法, 那么控制台的输出的结果其实是:

null
Mon Apr 10 12:55:48 CST 2017

说明父类初始化时, 构造方法中调用的是子类的overRide1方法;

时间: 2024-10-11 16:32:31

<EffectiveJava>读书笔记--01继承的使用注意的相关文章

【精通iOS开发(第7版)】读书笔记01(P1~90)

初次拿到这本书,看到目录,内容确实挺多的,阅读过程发现代码讲解也特别详实.本笔记主要是记录阅读的心得以及对当天知识的回顾,帮助自己提高理解.扯淡的话不说了,进入正题. =====================================================================================================================前面主要是对iOS开发语言以及开发环境XCode做了介绍,草草翻了下略过. 首先提到的是APP图标

《Head First Java》读书笔记——7 继承与多态

(一)继承范例 1.范例一: 1 pulic class Doctor{ 2 boolean worksAtHospital; 3 void treatPatient(){ 4 //执行检查 5 } 6 } 7 public class FamilyDoctor extends Doctor{ 8 boolean makesHouseCalls; 9 void giveAdvice(){ 10 //提出诊断 11 } 12 } 13 public class Surgeon extends Do

C++读书笔记 关于继承

最近在看 C++,再细读关于面向对象的一些知识点,好记性不如烂笔头,就归类总结一下. 面向对象中,继承是非常重要的基础概念.从已有的类派生出新的类,就可对原有的类进行扩展和修改. 称已有的类为基类,继承出来的类叫做派生类. 什么时候使用继承呢? 如果两个对象是is-a关系,则可以用继承. 比如水果与苹果.苹果 (is-a) 水果,这时候 水果是基类,苹果则是水果的派生类. 如果不是(is-a)关系,最好不要用继承.比如下面的关系例子. has-a         午餐 (has-a) 水果,但是

EffectiveJava读书笔记——考虑用静态工厂方法代替构造器(一)

参考网址:http://blog.csdn.net/mingyunduoshou/article/details/6149758 http://blog.163.com/[email protected]/blog/static/10182372420133220511247/ 静态工厂方法讲解 简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实

构建之法读书笔记01

第一章讲述了学生与老师的关系,很多内容都是老师上课所涉及到的,那就是如何让我们学好软件工程,在很多时候我们都是有惰性的,需要老师给与压力,也就是老师说的要想让我们真的学会游泳,就要下水,同时老师还需要踹我们一脚,不仅是在学士或者在游泳的过程中,都要让我们感到压力,那样才能激发我们求生的本能,同时能够让我们创造奇迹. 软件工程融汇了很多技术,书中更是列出了十多种相关科目,在感觉到博大精深的同时,有深深的感觉学习这门的压力,看到了软件工程的目标,就是创造“足够好”的软件,而足够好也是给我们纠正了,不

《Javascript高级程序设计》读书笔记之继承

1.原型链继承 让构造函数的原型对象等于另一个类型的实例,利用原型让一个引用类型继承另一个引用类型的属性和方法 function SuperType() { this.property=true; } SuperType.prototype.getSuperValue=function(){ return this.property; }; function SubType() { this.subProperty=false; } //继承SuperType SubType.prototype

新标准C++程序设计读书笔记_继承和多态

简单继承的例子: 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 class CStudent 6 { 7 private: 8 string name; 9 string id; //学号 10 char gender; //性别,'F'代表女, 'M'代表男 11 int age; 12 public: 13 void PrintInfo(); 14 void SetInfo( const

用户故事与敏捷开发读书笔记01

软件需求是一个软件项目成功的关键因素,许多软件项目失败都是因为软件需求的“不完整.不准确.不一致”.而软件需求是从业务需求经用户需求最终得到系统需求的,所以业务需求是软件需求的源头,而业务需求又是从客户业务中来的,客户有问题且需要解决的业务才是业务需求.所以准确.完整的根据用户的描述获取用户的业务需求至关重要.从软件开发的角度入手,使用用户故事,从用户角度描述功能,让我们可以从用户角度出发思考问题,避免程序员的自以为是,使得业务需求更加的准确.完整. 用户故事描述了对用户.系统.或软件购买者有价

犀牛书读书笔记-01

第一章,概述 这章是综述性质的,作者随意的给出了一些例子. 1. visibility = hidden, display = none. function hide (e, reflow) { if (reflow) { e.target.style.display = "none"; } else { e.target.style.visibility = "hidden"; } } 这段代码展示了两种隐藏节点的方式,之前在项目中接触最多的是display=no