Java抽象类和接口 小白版

抽象类和接口在Java编程中的应用

抽象是指从多个事物中将共性的本质内容抽象出来。在Java语言中,用abstract关键字修饰的类叫作抽象类。抽象类本身是不存在的,因此无法创建对象或实例化。在面向对象领域,抽象类主要用来进行类型隐藏。

抽象类中使用abstract修饰的方法称为抽象方法,它只有声明而没有方法体。抽象类的好处包括代码复用和利用多态隐藏实现类类型,从而获得更高的灵活性。

抽象类的特点包括修饰符必须为public或protected、无法实例化对象、普通类继承抽象类必须重写父类的抽象方法等。

抽象类和具体类的区别在于抽象类只有方法的声明而没有方法体,因此无法实例化对象;而具体类的方法包含方法的声明和方法体,可以实例化对象。

以下是一个抽象类的实例:

abstract class Door {
    public int weight;
    public int getWeight() {
        return weight;
    }
    public void setWeight(int weight) {
        this.weight = weight;
    }
    public abstract void open();
    public abstract void close();
}
class WoodenDoor extends Door{
    public void open(){
        System.out.println("Opening wooden door");
    }
    public void close(){
        System.out.println("Closing wooden door");
    }
}
class IronDoor extends Door{
    public void open(){
        System.out.println("Opening iron door");
    }
    public void close(){
        System.out.println("Closing iron door");
    }
}
public class Main{
    public static void main(String[] args) {
        Door door = new WoodenDoor();//向上类型转换(多态)
        door.open();
        door.close();
        door.setWeight(10);
        System.out.println(door.getWeight());
        door = new IronDoor();
        door.open();
        door.close();
    }
}

接口是一套规范或标准,它只规定必须实现的功能或要求,但没有规定如何实现或达到。接口通常用interface来声明。

接口的特点包括Java8之前所有接口方法都是抽象方法,Java8及以后的版本中,接口可以包含除了抽象方法以外的其他类型的方法,如默认方法、静态方法。接口不能实例化对象,但类可以使用implements关键字实现接口,一个类可以实现多个接口。类实现接口必须实现所有接口方法,否则这个类必须定义成抽象类。

接口的优点包括用来对类提供规范或标准、间接实现多重继承、使设计与实现相分离等。

以下是一个接口的实例:

//TypeC接口
interface TypeC {
    final int MAX_VOLTAGE = 5; //常量
    void methodA();
    void methodB();
}
abstract class Phone {
    void charge(){
        System.out.println("charge");
    }
    void play(){
        System.out.println("play");
    }
}
//小米手机支持TypeC接口
class XiaoMi extends Phone implements TypeC {
    @Override
    public void methodA() {
        System.out.println("methodA");
    }
    @Override
    public void methodB() {
        System.out.println("methodB");
    }
}
//华为手机支持TypeC接口
class HuaWei extends Phone implements TypeC {
    @Override
    public void methodA() {
    }
    @Override
    public void methodB() {
    }
}
public class Client {
    public static void main(String[] args) {
        Phone phone = new XiaoMi();
        phone.charge();
        phone.play();
        XiaoMi xiaomi =new XiaoMi();
        xiaomi.methodA(); //不灵活
        TypeC typeC = new XiaoMi(); //隐藏了具体实现,提高了灵活性
        typeC.methodA(); //更加灵活
        typeC = new HuaWei();
        typeC.methodA();
        typeC.methodB();
    }
}
热门手游下载