继承和子类继承了什么
CD、DVD例子中的代码不良,因为冗余过多、重载过多、重复性的代码过多,CD.Java 和 DVD.Java 太相似,我们是否可以从这两个类里面提取出来东西,
去做一个公共的东西 Database,使这个公共的东西可以表达 CD 或者 DVD ,然后让 Database 去管那些公共的东西,而不是管好几个类
1.extend:扩展(加 “s” 是因为三单)
代码:public class CD extends Item 代表 CD 扩展了 Item ,之后 CD 成为了 Item 的一个子类,这就叫做继承
2.CD和DVD得到了Item里的所有东西
父类 Item 中定义的东西,CD、DVD 这些子类会天然的继承得到那些东西,父类中的所有东西在子类中都是可能可以用的,可能是因为访问权限的问题,一会再说
3.继承语法:
某个类宣称自己 extends 另外一个类了,那么它就从父类得到了继承
子类继承了什么:父类中是private的成员变量在子类中不可用
1.将 private 改为 protected ,protected 代表同一个包内的其他类可以访问、子类可以访问
2.先在父类做一个构造器,在子类的 super()的括号中放入用到父类赋值的量
1.在子类当中,如果构造一个子类的对象出来,在那个对象形成过程中,它会自动的先去调用父类的那个构造器,
如果没有通过 super()传递参数给父类的构造器,那么它会去寻找父类那个不带参数的构造器;如果 super()给参数了,
那么它会根据参数去寻找父类当中适合的那个构造器
2.当我们去构造一个子类的对象的时候,首先要确保它父类所拥有的那些成员变量得到恰当的初始化,恰当的初始化指的是两件事情,定义初始化和构造器,如果又有定义初始化,又有构造器,那么定义初始化会先做,然后做构造器,父类子类都有时,一定会父类的那个部分定义初始化、构造器先做,做完之后,才轮到子类自己的定义初始化和构造器,不管是否主动的使用 super()去传递参数、去指定调用父类的哪一个构造器,以上流程是一定会做的,如果没有super(),那么会找没有参数的父类的构造器,如果有super(),那么就根据 super()的参数去寻找恰当
(1)一个子类有且只能有一个父类,所以 super()只能有一个,并且必须在第一行
(2)子类父类原则来看,一定优先保证父类的那个成员变量优先初始化并且执行构造器