Java第三课 - Java的继承详解
继承是什么
我们总是听说Java的三大特性,封装、继承、多态。感觉总是那么高大上。其实,这些概念,掰碎了来理解,就是现实生活中很常见的现象。类似于今天我们要说的继承,也是如此。
首先,来看看官方的定义。(来自百度百科)
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
定义太复杂了,太正式了。我们先来举个栗子。
首先,我们建立两个类,分别是:XiaoMing、XiaoHong。
public class XiaoMing {
private String age;
private String height;
private String run;
// 忽略getter、setter方法
}
public class XiaoHong {
private String age;
private String height;
private String swim;
// 忽略getter、setter方法
}
首先,XiaoMing和XiaoHong都拥有age、height两个属性。但是不同之处在于,xiaoMing喜欢run,xiaoHong喜欢swim。
也就是说,他们之间,有相同之处,又有不同之处。如果又新增XiaoWang、XiaoZhang、等等,那是否需要每次都写上age、height,这两个字段呢?那岂不是太麻烦了。
所以,这个时候,继承的作用就显现出来了。
我们再建一个类:Person类。
我们把age、height这两个属性,给放到Person类里面,并同时提供getter、setter方法。如下。
public class Person {
private String age;
private String height;
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
}
类建好了,那么现在,如何简化我们的XiaoMing以及XiaoHong呢?
很简单,使用extends关键字就好。如下。XiaoMing类就变成下面这个样子了。
public class XiaoMing extends Person{
private String run;
}
那么,我们要如何使用呢?也很简单。首先,我们创建XIaoMing对象。接着,通过get/set方法,对对象的属性进行设置以及获取。
public static void main(String[] args) {
XiaoMing xiaoMing = new XiaoMing();
xiaoMing.setAge("11");
xiaoMing.setHeight("150");
System.out.println(xiaoMing.getAge());
System.out.println(xiaoMing.getHeight());
}
打印的结果如下。
11
150
为什么要继承
根据上面的例子,我们来总结一下,为什么要使用继承。
首先,减少代码量是最直观的。我们不需要每一个类都去写上age、height属性,不需要每一个字段都写上get/set方法,简直是偷懒患者的福音呀。
其次,是修改方便。如果有一天,我们认为需要为他们每一个人都添加上一个爱好的字段,只需要在Person类里面添加:
private String hobby;
这样就可以了。不需要每一个类都去修改,大幅度提升了工作效率。再也不需要熬夜加班了!
实际使用例子
事实上,我们在实际工作中,在建立数据库对象,也是可以这么做的。
例如,我们的数据库表中,总会有这么几个固定的字段:
- create_by
- create_time
- update_by
- update_time
- valid_status
对于这些字段,我们就可以将它们抽出来,建立一个:BaseEntity的实体类。同时,为它们提供对外的get/set方法,这样在使用的时候,只需要继承BaseEntity,就能够获得这几个字段,提升了效率,也让代码更加简洁,更有利于今后的修改。
public class BaseEntity {
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
private Integer validStatus;
}
结语
好了,关于继承的内容,就讲到这里。