- 写在前面
- 抽象类
- 抽象类的特点
- 接口
- 接口的特点
我们要来学习一些更加抽象的东西了,我们学习了多态,知道了什么是动态绑定,不过这还不够,我们一起来看看抽象类,同时我们一起学习什么是接口
抽象类看看下面的代码
class Shape {
public void draw() {
}
}
class Triangle extends Shape {
@Override
public void draw() {
System.out.println("打印一个");
}
}
我们在多态里面看到了这个代码,发现class shape里面的draw方法没有用,我们是不是可以不实现这个方法,就把它声明一下,我们在Java中是可以做到的,这就是抽象方法。我们需要abstract来修饰(在访问修饰限定前后都一样)
abstract class Shape {
public abstract void draw();
}
抽象类的特点包含抽象方法的类是类
- 抽象类不能实例化
- 它生来就是要被继承的
- 抽象类里面可以存在普通成员和方法
- 一个普通类继承了抽象类,必须重写所有的抽象方法
- 但是仍然可以发生向上转型
- 一个抽象类A继承了抽象类B,那么这个抽象类B的抽象方法
- 要是这个A才被抽象类继承,抽象类要重写A和B中所有的抽象方法
- 抽象类不能被final修饰,也就是抽象方法也不能
抽象类不能实例化
一个普通类继承了抽象类,必须重写所有的抽象方法
说到这里,抽象类还有一些很古怪的特点,我们一起来看看吧.要是一个抽象类继承了一个抽象类会怎们样?
不会发生报错
abstract class Shape {
abstract public void draw();
}
abstract class A extends Shape {
public abstract void func();
}
不过要是一个抽象类A继承了抽象类B,那么这个抽象类B的抽象方法,要是这个A才被抽象类继承,抽象类要重写A和B中所有的抽象方法
接口接口有是比抽象类还要抽象的知识,我们来看看吧
abstract class A {
abstract public void a();
abstract public void b();
abstract public void c();
}
接口的特点要是一个类都是抽象方法,这个类我们可以定以成一个接口
接口使用interface修饰的,下面就是一个接口
interface IShape {
public abstract void draw();
default public void func() {
}
}
- interface 修饰
- 接口当中的普通方法,不能有具体方法的实现,要是非要有,必须加一个default来修饰
- 可以存在成员变量,但是必须初始化
- 接口可以存在static修饰的方法
- 接口里面所有的方法都是public的,可以省略,抽象方法还可以继续省略abstract
- 不可以实例化,但是可以向上转型
- 类和接口之间的关系是通过implements实现
- 普通类必须重写接口所有的抽象方法,default修饰的不用,当然这种也可以重写
- 普通类重写接口的抽象方法,访问修饰限定符必须是 public
- 一个类可以通过extends继承一个类或者抽象类,但是implements实现多个接口,接口之间 使用逗号隔开.
- 接口与接口之间之间是extends关系,意味拓展,也要"父债子尝"
interface 修饰
类和接口之间的关系是通过implements实现
可以存在成员变量,但是必须初始化,默认是有public static final,可以省略
一个类可以通过extends继承一个类或者抽象类,但是implements实现多个接口,接口之间 使用逗号隔开
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() {
}
}
接口与接口之间之间是extends关系
@Override
public void a() {
}
@Override
public void b() {
}
}
[外链图片转存中...(img-aFUeR7hf-1648390837753)] >接口与接口之间之间是extends关系 [外链图片转存中...(img-a50OoUYj-1648390837754)]



