抽象

抽象是隐藏实现细节并仅向用户显示功能的过程。
Java中有2种方式可实现抽象:

  • 抽象类(0到100%的抽象)
  • 接口(100%的抽象)

抽象类

抽象类是被声明为abstract的,且可以有抽象的或非抽象方法的类。抽象类应该由它的子类来扩展并且实现它的抽象方法。

抽象方法

抽象方法是没有实现的方法,即它没有任何方法主体。

abstract class Shape {
    public abstract double calculateArea(); // 没有任何方法主体
}

接口

接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

接口示例

package org.oriented.sample;

interface Paintable {
    void paint();
}

public class Room implements Paintable {
    @Override
    public void paint() {
        System.out.println("Painting the room");
    }
}

以下是真实生活中的抽象示例:

我们创建一个接口并命名为Sport,然后创建2个该接口的实现类;分别为Cricket和Football。在实际场景中,可以通过工厂方法提供实现类的对象,这样的话,最终用户看不到具体的实现类。工厂方法可用于根据某些创建条件来创建实现类的对象。

示例

package org.oriented.sample;

public interface Sport {
    void play();
}

Cricket类

package org.oriented.sample;

public class Cricket implements Sport {
    
    @Override
    public void play() {
        System.out.println("Playing cricket");
    }

}

Football类

package org.oriented.sample;

public class Football implements Sport {

    @Override
    public void play() {
        System.out.println("Playing football");
    }

}

SportInterfaceMain类

package org.oriented.sample;

public class SportInterfaceMain {
    public static void main(String[] args) {

        // factory method
        Sport sport = new Cricket();
        sport.play();

        System.out.println("=================");

        // You can easily change implementation
        sport = new Football();
        sport.play();
    }
}

运行以上程序后,结果显示如下:

Playing cricket
=================
Playing football

你可能感兴趣的:(抽象)