一、继承
1、当一个类需要继承自另一类的时候,使用关键字extends
2、当一个类继承了某个类之后,继承方:子类(派生类)
被继承方:父类(超类、基类)
3、当子类继承了父类后,就自动拥有了父类中允许被继承的成员,包括成员变量、成员方法,构造方法不能被继承
二、继承的优点
1、提高了代码的复用性。
2、由于共享的内容被放置在一个类中,如果有需要更改,只需要修改父类即可
3、为多态提供了前提
三、继承的缺点
1、一点继承,则子类依赖于父类,必须要有父类的存在,子类才能编译成功
四、继承的特点
1、java只允许但继承,一个类只能继承自一个类
2、java允许多重继承,如B extends A,C extends B
五、继承的注意事项
1、子类只能继承父类的非私有成员(成员变量和成员方法)
2、子类不能继承父类的构造方法,但是可以通过super关键字访问父类的构造方法
3、不要为了部分功能而去继承
六、什么时候使用继承
当子类相对父类是“is a”的关系时,就可以继承
七、类与类之间的关系
1."is a"(是一个):常见的就是"继承";
classPerson{}
classStudent extends Person{}
2."has a"(有一个):
class 学生{}
class 老师{}
//教室里面有:一个"老师",80名"学生"
class 教室{
int 楼层;//自有的属性
int 面积;//自有的属性
老师 tea = new 老师();//"老师"的对象最为"教室"的成员属性
学生[] stuArray = new 学生[80];//"学生"数组作为"教室"的成员属性
}
3."组成关系":一个类中没有"自有成员",全部都是其它的"类类型",由其它"类"组成的;
classCPU{}
class 硬盘{}
class 主板{}
.....
//"电脑"类全部都是由其它"类"组成
class 电脑{
CPUcpu;
硬盘 yp;
主板 zb;
....
}
4."依赖关系(关联关系)":
class 学生{}
class 老师{}
class 校长{
void talk(学生xs){//由于talk方法接收的是"学生"类型的对象,我们说:"校长类"依赖于"学生类"
}
void talk(老师 ls){
}
}
八、继承中的关系
1、父类中的非私有成员会被继承,构造方法不能被继承
2、子类中若有与父类中同名(返回值类型可以不同)的成员变量,则子类中的变量会覆盖父类中的变量
3、在一个方法中使用某各变量,先在本方法中查找,再到成员变量中查找,最后到父类的成员变量中查找,按照就近原则
九、继承中构造方法的关系
1、当实例化一个子类的对象时会先实例化父类的对象
2.一个类中如果只提供了带参构造方法,则系统不会再自动提供无参构造方法,当子类继承父类方法时,如果父类没有提供无参构造方法,只有带参的,那么必须在子类的构造方法中显示的调用父类的构造方法