1.抽象类
学习抽象类时应当先理解抽象方法的运用,抽象方法是一种特殊的方法,他有声明但没有具体的实现,具体的实现在继承的子类中实现。
抽象方法的申明格式:

public abstract void myFunction();

有抽象方法的类是抽象类,当然抽象方法和抽象类都需要有abstract作为修饰,抽象类不能用来创建对象。我们可以笼统地定义抽象类为有抽象函数的特殊类。

public abstract class abstractTest{//抽象类
    public abstract void myFunction();//抽象函数
}

如何使用抽象类呢?我们可以用子类去继承它,并在子类中将基类中的抽象函数进行重写,达到我们预想的结果。

import java.util.Scanner;

abstract class Shape{
    public double n;
    public double m;
    abstract public void getName();//获取什么外形
}

class Rectangle extends Shape{
    public String name;
    public Rectangle(String name){
        this.name=name;
    }
    @Override
    public void getName() {//重写getName
        System.out.println("My name is "+this.name);
    }
}

public class Demo{
    public static void main(String[] args) {
        Rectangle test = new Rectangle("Rectangle");
        test.getName();
    }
}

2.接口
接口是指供别人调用的方法或者函数,它相对于抽象类可能更为“抽象”。定义接口的关键词是interface,要让一个类遵循某组特地的接口需要使用implements关键字,一个类可以遵循多个接口,但是该类(非抽象类)同时要实现遵循接口的所有方法,抽象类可以不用全部实现。

import java.util.Scanner;

interface interfaceTest{
    public void getName();
}

class Rectangle implements interfaceTest{
    String name;
    Rectangle(String name){
        this.name=name;
    }
    @Override
    public void getName(){
        System.out.println("My name is "+this.name);
    }
}

public class Demo{
    public static void main(String[] args) {
        Rectangle test = new Rectangle("Rectangle");
        test.getName();
    }
}

3.抽象类与接口的应用场景
抽象类更偏向于整个类的抽象,它的包含更加全面,可以包括属性、行为等,但是接口更偏向于一个类的局部比如行为。拿一个我个人理解的例子来说吧,柯基、二哈、拉布拉多、中国田园犬都属于狗这一定义,我们可以将普遍的一些特征、行为,比如几条腿(特征)、犬吠(行为)等抽象成一个狗类,然后在描述柯基这样更为具体的狗类时我们可以继承抽象类。但如果我们要抽象他们的一种行为我们就可以使用接口,比如拆不拆家。继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。