Java的抽象类和接口

java中的抽象类是一个像鬼一样的东西!

它究竟有什么用!

举例说明!例子如下:

public class Main {
    public static void main(String[] args) {
        Person p = new Student();
        p.run();
    }
}

abstract class Person {
    public abstract void run();//抽象类
}

class Student extends Person {
    @Override
    public void run() {
        System.out.println("Student.run");
    }
}

简单的理解就是为了覆写父类中的方法,但该方法在父类中又没有任何意义,但又想装逼用覆写怎么办!所以就引入了抽象类,它借用关键字abstract,只有方法名没有具体的实现内容。大致就是这么个东西!

=================================================================================

哈哈!其实抽象类是有大作用的!

上面简单介绍了一下抽象类,但在实际中,抽象类方法本质上是定义接口规范的,也就是说在父类中规定方法的名称,让继承它的子类都有相同的接口实现,这样多态就能发挥其真正的威力。

但是对于单纯的抽象类(只有抽象的东西,其他的什么也没了),每次都要写关键字abstract,就太麻烦了,所以此处引入了接口!

接口 interface:

abstract class Person {
    public abstract void run();
    public abstract String getName();
}
//下面的代码就是用interface接口替换abstract抽象类的结果
interface Person {
    void run();
    String getName();
}

那么究竟如何用继承的方法来继承接口呢?此处就引入了implements关键字:

class Student implements Person {
    private String name;

    public Student(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(this.name + " run");
    }

    @Override
    public String getName() {
        return this.name;
    }
}

接口还有一个重要的作用!就是可以实现子类继承多个父类的情况!在Java中,一个类只能继承自另一个类,不能从多个类继承。但是,一个类可以实现多个interface,例如:

class Student implements Person, Hello { // 实现了两个interface 同时继承了Person,Hello
  ... }

关于接口的继承!一个接口也可以继承另一个接口,和普通的继承一样!例如:

interface Hello {
    void hello();
}

interface Person extends Hello {
    void run();
    String getName();
}

合理的接口使用,提高代码的复用,是牛牛的工程师必备的技能。。。。。。

原文地址:https://www.cnblogs.com/lipu12281/p/12172464.html