面向对象三大特征,分别是继承、封装和多态,继承可以降低代码编写的冗余度,提高编程的效率@mikechen
继承定义
继承(英语:inheritance)是面向对象软件技术中的一个概念,继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法。
继承它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。
在生活中,我们所理解的“继承”更多的是“子承父业”,就是儿子与父亲之间存在“继承”关系。
为什么需要继承
在生活中,很显然,儿子继承父亲的财产,可以少奋斗几十年甚至几辈子。
在编程中,继承有什么作用呢?如果仅仅只有两三个类,每个类的属性和方法很有限的情况下确实没必要实现继承。
但事情并非如此,事实上一个系统中往往有很多个类并且有着很多相似之处,比如学生和老师同属人,各个类可能又有很多个相同的属性和方法,这样的话如果每个类都重新写不仅代码显得很乱,代码工作量也很大。
这时继承的优势就出来了,可以直接使用父类的属性和方法,自己也可以有自己新的属性和方法满足拓展,父类的方法如果自己有需求更改也可以重写。
这样使用继承不仅大大的减少了代码量,也使得代码结构更加清晰可见,这就是继承存在的价值,大写的重点,好哇。
继承特性
- 子类拥有父类非 private 的属性、方法;
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
- 子类可以用自己的方式实现父类的方法;
- Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类
- 多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
继承实现举例
在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:
class 父类{ ... //成员变量、成员方法 }
class 子类 extends 父类{ ... //类体 }
下面我们一起来看一个现实中的例子:狗和猫都是动物,如果将狗、猫作为类,它们可以继承动物类很多的共同特性和行为。
1)动物类
/** * 面向对象:继承 * @author mikechen * */ class Animal{ private String name; public void setName(String name){ this.name = name; } public String getName(){ return this.name; } }
2)狗类
/** * 面向对象:继承 * @author mikechen * */ class Dog{ private String name; private String sound; public void setName(String name){ this.name = name; } public void setSound(String sound){ this.sound = sound; } public String getName(){ return this.name; } public String getSound(){ return this.sound; } }
3)引入继承
/** * 面向对象:继承 * @author mikechen * */ class Animal{ private String name; public void setName(String name){ this.name = name; } public String getName(){ return this.name; } } class Dog extends Animal{} public class Test{ public static void main(String[] args){ Dog dog= new Dog(); dog.setName("狗"); System.out.println(dog.getName()); } }
我们可以看出,子类可以在不扩展操作的情况下,使用父类的属性和功能。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》