抽象(abstract)
抽象是一种思维方式,抽取出“公共”的部分出来。
越抽象的思维,涵盖的范围越大
越具体的思维,可以落地的可能性越大。
抽象类
专门有一种类,被称为抽象类——这些无法实例化出对象
通过abstract(抽象)修饰类的定义
public abstract class Test {
}
抽象类无法实例化对象,如:
抽象方法
抽象方法——定义在父类中,专门留给子类去重写的方法(父类只有方法签名,没有实现),使用abstract修饰普通方法定义。
如图,抽象方法,只在父类中有方法签名,结尾用 ; 但是在子类中必须重写,或者也可以声明自己是抽象类。
总结:
抽象方法只能出现在抽象类,抽象类不一定有抽象方法。
抽象类VS普通类: 是否可以实例化对象
abstract在Java中的两个作用:
1、修饰类的定义,类变成抽象类。该类无法被实例化。
2、修饰方法的定义
- 要求类必须是抽象类
- 该方法只需要签名,无需具体的方法体(只说明目的,没有怎么做)
我们可以这么理解,抽象类承诺有这些抽象方法,但是都没有实现,而实现类继承抽象类,并重写实现了这些抽象方法,供使用方调用。
接口(interface)
可以使用抽象类,也可以使用接口(interface)。
我们可以这样理解接口,接口就是一种要求(标准),调用者为甲方,实现者为乙方,通过这样,实现了分工,每个类 都专注自己的专业,并且很容易替换乙方,因为标准是一致的。
接口的定义:
interface 名称{…}
public interface Test2 {
}
这样书写简单,虽然没写,但是隐含着abstract修饰。
接口不能实例化成对象,允许并且只允许出现抽象方法。
接口中的方法
public interface Test2 {
void method1();
void method2();
}
- 定义的所有方法都是抽象方法
- 虽然没,写但是都隐含着abstract修饰
- 隐含着访问限定符都是public
- 不用写方法体,void method();
类的声明实现接口
class 类名 implements 接口名
可以理解成把接口当成抽象类去理解即可
实现类必须做到:
- 要把所有抽象方法都实现了——不能在有抽象方法了
- 或者声明自己是抽象类
使用接口
1、和抽象类一样,不能直接实例化对象
2、多态使用
和继承不同
1、一个类只允许继承自一个父类
2、一个类可以同时实现多个接口