《Head First Java》20200928读书笔记

编程入门 行业动态 更新时间:2024-10-21 17:36:41

《Head First Java》20200928<a href=https://www.elefans.com/category/jswz/34/1768764.html style=读书笔记"/>

《Head First Java》20200928读书笔记

P249-P253

《Head First Java》20200928读书笔记

构造函数小回顾

  • 构造函数是在新建类时会执行的程序。
Duck d = new Duck();
  • 构造函数必须与类的名字一样,且没有返回类型。
public Duck(int size){   }
  • 如果你没有写构造函数,则编译器会帮你写一个没有参数。
public Duck(){   }
  • 一个类可以有很多个构造函数,但不能有相同的参数类型和顺序,这叫作重载过的构造函数。
public Duck(){   }
public Duck(int size){   }
public Duck(String name){   }
public Duck(String name,int size){   }

问:构造函数应该是公有的吗?
答:不。构造函数可以是公有,私有或不指定的。

问:一个私有的构造函数有什么作用?没有人能够调用它,所以也就没有能够创建该对象?
答:不是这么说的。私有不是完全不能存取,它代表该类以外不能存取。

父类、继承与构造函数之间的关系

在创建某个对象时(完全没有其他方法能够创建对象,只能通过new来产生新对象),对象会取得所有实例变量所需的空间,这当然也包括继承下来的东西。


此图所示只有一个对象。但因为它带有Snowboard与Object的内容,所以这两个类的所有实例变量也会在这里。

父类的构造函数在对象的生命中所扮演的角色

在创建新对象时,所有继承下来的构造函数都会执行。
这代表每个父类都有一个构造函数(因为每个类至少都会有一个构造函数),且每个构造函数都会在子类对象创建时期执行。
执行new的指令是个重大事件,它会启动构造函数连锁反应。
还有,就算是抽象的类也有构造函数。
虽然你不能对抽象的类执行new操作,但抽象的类还是父类,因此它的构造函数会在具体的子类创建出实例时执行。
在构造函数中用super调用父类的构造函数的部分。
要记得子类可能会根据父类的状态来继承方法(也就是父类的实例变量)。
完整的对象需要也是完整的父类核心,所以这就是为什么父类构造函数必须执行的原因。
就算Animal上有些变量是Hippo不会用到的,但Hippo可能会用到某些继承下来的方法必须读取Animal的实例变量。
构造函数在执行的时候,第一件事是去执行它的父类的构造函数,这会连锁反应到Object这个类为止。

Hippo对象IS-A Animal同时也IS-A Object。如果你要创建出Hippo,也得创建出Animal与Object的部分。
这样的过程被称为“构造函数链(Constructor Chaining)”

创建Hippo也代表创建Animal与Object

public class Animal{public Animal(){System.out.println("Making an Animal");}
}public class Hippo extends Animal{public Hippo(){System.out.println("Making a Hippo");}
}public class TestHippo{public static void main(String[] args){System.out.println("Starting...");Hippo h = new Hippo();}
}

如何调用父类的构造函数?

调用父类构造的唯一方法是调用super()。

public class Duck extends Animal{int size;public Duck(int newSize){super();//要这么调用size = newwSize;}
}

在你的构造函数中super()会把父类的构造函数放在堆栈的最上方。
父类的构造函数会调用它的父类构造函数。
这会一路上去直到Object的构造函数为止。
然后再一路执行,弹出回到原来的构造函数。

更多推荐

《Head First Java》20200928读书笔记

本文发布于:2024-02-27 13:27:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1706717.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:读书笔记   Head   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!