文章目录
写在前面
我们要来学习一些更加抽象的东西了,我们学习了多态,知道了什么是动态绑定,不过这还不够,我们一起来看看抽象类,同时我们一起学习什么是接口
抽象类
看看下面的代码
class Shape {
    public void draw() {
    }
}
class Triangle extends Shape {
    @Override
    public void draw() {
        System.out.println("打印一个🔺");
    }
}
 
我们在多态里面看到了这个代码,发现class shape里面的draw方法没有用,我们是不是可以不实现这个方法,就把它声明一下,我们在Java中是可以做到的,这就是抽象方法。我们需要abstract来修饰(在访问修饰限定前后都一样)
抽象类的特点
- 抽象类不能实例化
 - 它生来就是要被继承的
 - 抽象类里面可以存在普通成员和方法
 - 一个普通类继承了抽象类,必须重写所有的抽象方法
 - 但是仍然可以发生向上转型
 - 一个抽象类A继承了抽象类B,那么这个抽象类B的抽象方法
 - 要是这个A才被抽象类继承,抽象类要重写A和B中所有的抽象方法
 - 抽象类不能被final修饰,也就是抽象方法也不能
 


说到这里,抽象类还有一些很古怪的特点,我们一起来看看吧.要是一个抽象类继承了一个抽象类会怎们样?
不会发生报错

不过要是一个抽象类A继承了抽象类B,那么这个抽象类B的抽象方法,要是这个A才被抽象类继承,抽象类要重写A和B中所有的抽象方法


接口
接口有是比抽象类还要抽象的知识,我们来看看吧
接口的特点
接口使用interface修饰的,下面就是一个接口
interface IShape {
    
    public abstract void draw();
    default public void func() {
        
    }
}
 
- interface 修饰
 - 接口当中的普通方法,不能有具体方法的实现,要是非要有,必须加一个default来修饰
 - 可以存在成员变量,但是必须初始化
 - 接口可以存在static修饰的方法
 - 接口里面所有的方法都是public的,可以省略,抽象方法还可以继续省略abstract
 - 不可以实例化,但是可以向上转型
 - 类和接口之间的关系是通过implements实现
 - 普通类必须重写接口所有的抽象方法,default修饰的不用,当然这种也可以重写
 - 普通类重写接口的抽象方法,访问修饰限定符必须是 public
 - 一个类可以通过extends继承一个类或者抽象类,但是implements实现多个接口,接口之间 使用逗号隔开.
 - 接口与接口之间之间是extends关系,意味拓展,也要"父债子尝"
 



interface IA {
    void a();
}
interface IB {
    void b();
}
class C {
    
}
class D extends C implements IA,IB {
    @Override
    public void a() {
    }
    @Override
    public void b() {
    }
}
 


 @Override
 public void a() {
}
@Override
public void b() {
}
 
}
[外链图片转存中...(img-aFUeR7hf-1648390837753)]
>接口与接口之间之间是extends关系
[外链图片转存中...(img-a50OoUYj-1648390837754)]










