抽象是隱藏實現(xiàn)細節(jié)并僅向用戶顯示功能的過程。
Java中有2種方式可實現(xiàn)抽象:
- 抽象類(0到100%的抽象)
- 接口(100%的抽象)
抽象類
抽象類是被聲明為abstract的家坎,且可以有抽象的或非抽象方法的類。抽象類應(yīng)該由它的子類來擴展并且實現(xiàn)它的抽象方法奔脐。
抽象方法
抽象方法是沒有實現(xiàn)的方法,即它沒有任何方法主體。
abstract class Shape {
public abstract double calculateArea(); // 沒有任何方法主體
}
接口
接口是一系列方法的聲明往弓,是一些方法特征的集合旦装,一個接口只有方法的特征沒有方法的實現(xiàn)页衙,因此這些方法可以在不同的地方被不同的類實現(xiàn),而這些實現(xiàn)可以具有不同的行為(功能)
接口示例
package org.oriented.sample;
interface Paintable {
void paint();
}
public class Room implements Paintable {
@Override
public void paint() {
System.out.println("Painting the room");
}
}
以下是真實生活中的抽象示例:
我們創(chuàng)建一個接口并命名為Sport,然后創(chuàng)建2個該接口的實現(xiàn)類店乐;分別為Cricket和Football艰躺。在實際場景中,可以通過工廠方法提供實現(xiàn)類的對象眨八,這樣的話腺兴,最終用戶看不到具體的實現(xiàn)類。工廠方法可用于根據(jù)某些創(chuàng)建條件來創(chuàng)建實現(xiàn)類的對象廉侧。
示例
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();
}
}
運行以上程序后页响,結(jié)果顯示如下:
Playing cricket
=================
Playing football