继承和多态

面向对象有三大特性:封装、继承和多态。个人认为,继承和多态很像,继承大的作用是体现多态。

继承

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