面向对象有三大特性:封装、继承和多态。个人认为,继承和多态很像,继承大的作用是体现多态。
1、什么是继承
继承是面向对象语言的一个重要特性。继承是从父类中继承了父类的相关方法等。也就是说,父类有的东西,子类能通过继承获得与父类相同的东西。
当创建一个类时,除非明确指定我们要继承的类,否则我们默认的都继承自Object类。
2、父类(超类)和子类
当类A继承了类B时,类B称为类A的父类/超类,类A称为类B的子类。
继承时,使用关键字:extends,子类访问父类时,使用super关键字。
3、继承的作用
继承最大的作用是代码的复用。减少了代码的冗余
继承表现出来的是父子类的相同特性。
4、以笔、圆珠笔和铅笔为例。圆珠笔和铅笔都是笔,都继承自笔类,它们都能写写画画。
新建Pens(父类)及BallpointPen(子类)、铅笔(Pen),它们都有相同的写方法和能写的特点
public class Pens { public void write(){ System.out.println("I am " + this.getClass().getSimpleName() + ", I can write"); } /** * 特点 */ public void feature(){ System.out.println("I can write"); } }
/** * 圆珠笔 * 继承了Pens类的特性(write和feature) */ public class BallpointPen extends Pens { }
/** * 铅笔 * 继承了Pens类的特性(write和feature) */ public class Pencil extends Pens { }
@Test void contextLoads() { //BallpointPen BallpointPen ballpointPen = new BallpointPen(); ballpointPen.write(); ballpointPen.feature(); System.out.println("........................."); //Pencil Pencil pencil = new Pencil(); pencil.write(); pencil.feature(); }
/**
* 输出
* I am BallpointPen, I can write
* I can write
* .........................
* I am Pencil, I can write
* I can write
*/
在子类和测试代码中,不需要再另外写任何的代码,圆珠笔和铅笔都能实现与笔类相同的特性。
1、 什么是多态
多态是面向对象语言的另一个重要特性。
多态是同一特性在不同的类有不同的表现。
2、 多态的作用
a) 代码复用。
b) 提高代码的扩展性和维护性。
3、 还是以圆珠笔和铅笔为例。圆珠笔和铅笔都是笔,都可以写写画画,但圆珠笔是不可擦除的,而铅笔是可擦除的。
/** * 圆珠笔 * 继承了Pens类的特性(write和feature) * 无法被擦除,重写feature方法 */ public class BallpointPen extends Pens { @Override public void feature() { super.feature(); System.out.println("I can`t be erased"); } }
/** * 铅笔 * 继承了Pens类的特性(write和feature) * 可以被擦除,重写feature方法 */ public class Pencil extends Pens { @Override public void feature() { super.feature(); System.out.println("I can be erased"); } }
与上面相同的测试代码,在圆珠笔和铅笔中输出了不同的特点(可擦除和不可擦除)
/** * 输出 * I am BallpointPen, I can write * I can write * I can`t be erased * ......................... * I am Pencil, I can write * I can write * I can be erased */
继承是不同的类有相同的特性、相同的实现等,而多态是相似的类有不同的特性或同一特性有不同的实现。要实现多态,需要先实现继承。
原文:https://www.cnblogs.com/yinghuanblog/p/12953146.html