在面向对象的编程过程中,抽象是他的特征之一。在JAVA中,可以通过俩种形式来体现OOP的抽象:接口类和抽象类,下面具体阐述一下abstract抽象类和interface接口。
一、abstract抽象方法,抽象类,面向抽象设计
在java语句中,我们通常会定义一个方法,如果这个方法没有具体执行代码,也不需要去执行,我们就可以把这个方法定义为抽象方法,这种方法只有声明,而没有具体实现,其定义格式如下:
abstract void run()
抽象方法的定义中必须添加abstract前缀,用于声明我们写的这个方法是抽象方法,抽象方法必须放在抽象类中,抽象类的定义格式如下:
//抽象方法的声明(abstract) +class+类名
abstract class run{
}
不管是抽象类还是抽象方法都是无法实例化的,也就是说我们无法调用抽象类或抽象方法的,那我们定义抽象类有什么作用呢?
public class Abstract01 {
public static void main(String[] args) {
Run p=new Runner();//实例化
p.sayhello();
//直接调用子类中的sayHello方法
//而不需要去关心Run父类
}
}
//抽象方法的声明(abstract) +class+类名
abstract class Run{
public void sayhello() {
}
}
class Runner extends Run{
//子类必须重写父类方法
@Override
public void sayhello() {
System.out.println("Hello");
}
}
因为抽象类本身被设计出来就是只能用于继承,因此抽象类可以“强迫”子类实现其定义的抽象方法,否则编译就会报错,故抽象类的定义实际上是为了规范子类中的方法。在实际使用中,我们更多的去用抽象方法直接引用子类,而不需要关心父类。这种尽量利用高层类型而避免引用实际子类型的方式为面向抽象设计,在很多核心类库,框架技术和应用框架的底层技术是非常常见的。
二、interfacce接口
所谓interface接口,是比抽象方法更加抽象的一种代码结构,它只包含常量,抽象方法,默认方法等。interface接口的默认方法就是public abstract(无须输入)。
(1)一个interface接口包含:
①变量类型只能是常量,默认的修饰符为:public static final
②所有方法都是public abstract类型的
③成员方法只能是抽象方法,而且只能使用修饰符public abstract
下面定义一个interface接口:
//定义接口Computer
interface Computer{
public void Start();//定义公共普通方法start()
abstract public void Engine();//定义抽象方法Engine()
final String Processor ="intel i7";//定义常量Processor(处理器)intel i7
}
(2)类只能单继承,但是interface却可以多继承,使用关键字extends
//继承了其他接口:LoudSpeaker(扬声器),Scream(屏幕),Battery(电池)
interface Computer extends LoudSpeaker,scream,Battery{
public void Start();//定义公共普通方法start()
abstract public void Engine();//定义抽象方法Engine()
final String Processor ="intel i7";//定义常量Processor(处理器)intel i7
}
interface LoudSpeaker{
final String brand="Bose";
}
interface Scream{
final String Brand="sansame";
}
interface Battery{
final String Brand="made in chian";
}
(3)类与接口的继承使用关键字implements
//电子设备类(class类)实现一个接口(电脑)
class electronicEq implements Computer {
}
interface Computer {
}
(4)类与类与接口的代码实现:
//类继承类,类实现接口
class electronicEq extends Smartphone implements Computer,LoudSpeaker {
}
//智能手机类
class Smartphone{
}
//电脑接口
interface Computer {
}
//扬声器接口
interface LoudSpeaker{
}
(5)接口与抽象类的比较
定义:抽象类用abstract class定义 接口用interface定义
继承:抽象类只能用extends单继承 接口用extends多继承,用implements实现类
成员变量的定义:抽象类可以定义 接口不可以定义
常量:抽象类使用static final定义 接口不需要关键字,接口定义的都是常量
俩者都可以定义抽象方法
非抽象方法:抽象类可以定义普通方法 接口可以定义default方法
构造方法:抽象类可以定义构造方法 接口不可以构造方法
访问修饰符:抽象类可以使用任何的访问修饰符 接口只能使用public修饰符
与诸君共勉