接口的作用:
-
定义行为规范:接口定义了一组方法的签名,但不包含实现细节。这意味着任何实现该接口的类都必须遵循这个行为规范,即提供接口中所有方法的具体实现。这有助于确保代码的统一性和可预测性。
-
解耦:接口使得类的实现与使用之间解耦。这意味着一个类可以依赖于接口而不是具体的实现类。这增加了代码的灵活性和可维护性,因为可以在不修改使用接口的代码的情况下替换实现类。
-
多态性:接口是实现多态性的关键。通过接口,我们可以编写接受任何实现该接口的对象的代码,而无需关心具体的实现类。这使得代码更加通用和可重用。
-
模块化:接口有助于实现模块化编程。通过将功能划分为不同的接口和类,我们可以更容易地组织和管理代码。这有助于提高代码的可读性和可维护性。
-
设计模式实现:许多常见的设计模式(如工厂模式、观察者模式等)都依赖于接口来实现。通过定义和使用接口,我们可以更容易地实现这些设计模式,从而提高代码的质量和可维护性。
-
扩展性:接口允许我们在不修改现有代码的情况下添加新功能。通过定义新的接口或扩展现有接口,我们可以添加新的方法签名,并让实现类根据需要实现这些方法。
-
框架设计:在Java框架设计中,接口也扮演着重要角色。框架通常定义了一组接口,允许开发者实现这些接口以扩展或定制框架的功能。
//能够提供服务
//本题的接口
public interface Fuction {
void takePicture();
void viewing();
}
//本题的父类
package testall.a03jie;
abstract class Feature {
private String name;
private double price;
public Feature() {
}
public Feature(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
abstract public String getInfo();
}
//两个子类
package testall.a03jie;
public class Camera extends Feature implements Fuction {
private double zoom;
public Camera() {}
public Camera(String name, double price, double zoom) {
super(name, price);
this.zoom = zoom;
}
@Override
public void takePicture(){
System.out.println(this.getName()+"数码相机照相!");
}
@Override
public void viewing(){
System.out.println(this.getName()+"数码相机浏览照片!");
}
@Override
public String getInfo(){
return "名称: "+this.getName()+",价格: "+this.getPrice()+",数码相机变焦倍数:"+this.zoom;
}
public void printPhoto(){
System.out.println(this.getName()+"数码相机打印了照片!");
}
}
package testall.a03jie;
public class Smartphone extends Feature implements Fuction{
private String OS;
public Smartphone() {}
public Smartphone(String name, double price, String OS) {
super(name, price);
this.OS = OS;
}
@Override
public void takePicture(){
System.out.println(this.getName()+"智能手机照相!");
}
@Override
public void viewing(){
System.out.println(this.getName()+"智能手机浏览照片!");
}
@Override
public String getInfo(){
return "名称: "+this.getName()+",价格: "+this.getPrice()+",智能手机操作系统:"+this.OS;
}
public void passmessage(String message){
System.out.println(this.getName()+"智能手机发送了短信: "+message);
}
}
//浅浅测试一下
public class Test {
public static void main(String[] args) {
Smartphone phone=new Smartphone("华为",5600,"鸿蒙OS");
Camera camera=new Camera("爱国者",3500,20);
System.out.println("-----智能手机-----的信息:"+phone.getInfo());
System.out.println("-----数码相机-----的信息:"+camera.getInfo());
phone.takePicture();
phone.viewing();
phone.passmessage("Hello world!!!!");
camera.takePicture();
camera.viewing();
camera.printPhoto();
}
}
//最后结果:
-----智能手机-----的信息:名称: 华为,价格: 5600.0,智能手机操作系统:鸿蒙OS
-----数码相机-----的信息:名称: 爱国者,价格: 3500.0,数码相机变焦倍数:20.0
华为智能手机照相!
华为智能手机浏览照片!
华为智能手机发送了短信: Hello world!!!!
爱国者数码相机照相!
爱国者数码相机浏览照片!
爱国者数码相机打印了照片!