java继承
- 因为现实世界有很多的继承关系,所以把现实世界的事或物转换到计算机中,就需要java的继承,同时增加类和类之间的关系,此关系很单一,就是继承关系
- 实现继承就是为了代码的重用,继承充分展现了代码的可复用性
- 继承必须以封装为基础
java继承的特点
- 所有的非object类都有父类,如果没有写extends关键字,实际上默认继承了object类
- java的根类就是object类
- 继承是通过extends关键字来实现的,extends后的父类只有一个,所以java是单继承
- 有了java的继承,好处就是代码重用;坏处就是类和类之间的关系复杂了.
继承中的几个容易混淆的概念
- 子类能够继承长辈的非私有的东西(属性和方法)
- 子类不是拥有长辈的东西,只是子类对向北的东西具有访问性
- 本类里的东西,就是本类自己的
使用继承要注意的问题
有了继承之后,同样要考虑数据的存储问题,对象的数据该如何存取在子类中利用继承的可访问性调用长辈的方法,用长辈自己的方法操作长辈类自己对象中的私有属性.
super关键字
- super(参数列表)
参数列表,是可以为0个或多个的
调用父类构造,且super(参数列表)只能写在子类构造的第一条语句
super()调用的是父类的午餐构造,如果不写,系统会自动给添上 - super.
用来调用父类的方法或属性
前提是父类允许子类调用(即父类对子类开放访问性)
结论
做继承是为了复用长辈中的内容(属性和方法)
即,在子类中使用长辈中的内容(属性和方法)
所以继承的优点:可以使用长辈中的内容
缺点:1.增加了类和类之间的复杂关系
2.如果继承的层次越多
子类中可访问的内容就越多
但子类并不都需要
组合
组合的方式有两种
- 方式一 : 在类中放置属性/组合属性
public class xx{
//组合另一个Test类中的对象
private Test test;
public void method(){
//在此方法中可以使用或操作test对象中的属性
}
}
- 方式二 : 在类的方法中组合数据
public class yy{
public void method(Test test){
//在此方法中使用或操作test对象中的数据
}
}
多用继承少用组合
-
什么时候用继承
-
- 继承的层次不是很多的时候
-
- 要使用多态的时候就必须是以继承作为前提的
-
什么时候使用组合
-
- 想要获取别的类中的方法和属性的时候可以用组合
-
现用现组合
注意
组合是has a的关系 (has a有一个)
如:
方式一 : xx类中有一个test对象
方式二 : yy类中的method方法中有一个test对象
继承是is a的关系(is a是一个)
如:
Student is a CommonPerson学生是一个普通人
public class Student extends CommonPerson
Teacher is a CommonPerson老师是一个普通人
public class Teacher extends CommonPerson
想要用别的类中的数据
- 用继承
- 用组合