抽象是隐藏实现细节并仅向用户显示功能的过程。
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