面向对象——接口类

面向对象——接口类

今天在写一个功能的详细设计文档,要写代码关系,其中有个判断是否是接口类,于是来查了查接口类的定义

接口的基础语法

[修饰符列表] interface 接口名{
    
}
 

1.接口也是一种引用数据类型

2.借口是完全抽象的

3.接口支持多继承,一个接口可以继承多个接口

接口中只包含两部分内容,常量和抽象方法

4.接口中所有元素都是public修饰的

5.接口中的抽象方法定义时:public abstract修饰符可以省略

6.接口中的方法都是抽象方法,所以接口中的方法不能有方法体。

7.接口中常量的public static final 可以省略

8.一个非抽象类实现接口的时候,必须将接口中的方法加以实现

9.一个类可以实现多个接口

10.extends 和 implements 可以共存,extends 在前,implements 在后

11.使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)

//Figure.java文件
package com.shouyerenst;
public interface Figure {//接口中静态成员变量
    String name = "几何图形";//省略public static final ② 
	// 绘制几何图形方法
	void onDraw(); //省略public ③ 
}
 

代码第①行是声明Figure接口,声明接口使用interface关键字,interface前面的修 饰符是public或省略。public是公有访问级别,可以在任何地方访问。省略是默认访问级别,只能在当前包中访问。代码第②行声明接口中的成员变量,在接口中成员变量都静态成员变量,即省略了public static final修饰符。代码第③行是声明抽象方法,即省略了public关键字。

某个类实现接口时,要在声明时使用implements关键字,当实现多个接口之间用逗号(,)分隔。实现 接口时要实现接口中声明的所有方法。

实现接口Figure示例代码如下:

//Ellipse.java文件 
package com.shouyerenst.imp;

import com.shouyerenst.Figure; 
//几何图形椭圆形 
public class Ellipse implements Figure { 
    //绘制几何图形方法 
    @Override 
    public void onDraw() { 
        System.out.println("绘制椭圆形..."); 
    } 
}
//Triangle.java文件 
package com.shouyerenst.imp; 

import com.shouyerenst.Figure; 
//几何图形三角形 
public class Triangle implements Figure {
// 绘制几何图形方法 
    @Override 
    public void onDraw() { System.out.println("绘制三角形..."); 
                         } 
}
 

注意 接口与抽象类一样都不能被实例化。

接口在开发中的作用

接口在开发中的作用,类似于多态在开发中的作用。降低程序的耦合度,提高程序的扩展性。

面向接口编程,可以降低程序的耦合度,提高程序扩展力。符合ocp开发原则。接口的使用离不开多态机制

一个经典案例

顾客通过菜单点菜,厨师实现菜单内容。

菜单接口

package com.shouyerenst.OCP;
//菜单接口
public interface Menu {
    //西红柿炒鸡蛋
    void ScrambledEggsWithTomatoes();
    //鱼香肉丝
    void ShreddedFishAndMeat();
}
 

中餐厨师类

package com.shouyerenst.OCP;
//中餐厨师
public class ChineseChef implements Menu{
    //西红柿炒鸡蛋
    public void ScrambledEggsWithTomatoes(){
        System.out.println("中餐厨师做的西红柿炒鸡蛋!!!");
    }
    //鱼香肉丝
    public void ShreddedFishAndMeat() {
        System.out.println("中餐厨师做的鱼香肉丝!!!");
    }
}
 

西餐厨师类

package com.shouyerenst.OCP;
//西餐厨师
public class WesternChef implements Menu{
    //西红柿炒鸡蛋
    public void ScrambledEggsWithTomatoes(){
        System.out.println("西餐厨师做的西红柿炒鸡蛋!!!");
    }
    //鱼香肉丝
    public void ShreddedFishAndMeat() {
        System.out.println("西餐厨师做的鱼香肉丝!!!");
    }
}

 

顾客类

package com.shouyerenst.OCP;
//顾客
public class Customer {
    private Menu menu;
    
    //构造方法
    public Customer() {
    }
    public Customer(Menu menu) {
        this.menu = menu;
    }
    
    //get、set方法
    public Menu getMenu() {
        return menu;
    }
    
    public void setMenu(Menu menu) {
        this.menu = menu;
    }
    
    public void order(){//点菜方法
        //Menu m = this.getMenu();
        menu.ScrambledEggsWithTomatoes();
        menu.ShreddedFishAndMeat();
    }
}
 

测试类

package com.shouyerenst.OCP;

public class Test {
    public static void main(String[] args) {
        //创建厨师对象
        Menu cook1 = new ChineseChef();
        //创建顾客对象
        Customer customer = new Customer(cook1);
        //顾客点菜
        customer.order();
    }
}
 

抽象类与接口区别

归纳抽象类与接口区别如下:

  1. 接口支持多继承,而抽象类(包括具体类)只能继承一个父类。

  2. 接口中不能有实例成员变量,接口所声明的成员变量全部是静态常量,即便是变量不加 public static final 修饰符也是静态常量。抽象类与普通类一样各种形式的成员变量都可以声明。

  3. 接口中没有包含构造方法,由于没有实例成员变量,也就不需要构造方法了。抽象类中可以有实例成员变量,也需要构造方法。

  4. 抽象类中可以声明抽象方法和具体方法。Java 8之前接口中只有抽象方法,而Java 8之后接口中也可以声明具体方法,具体方法通过声明默认方法实现。

from:https://blog.csdn.net/shouyeren_st/article/details/126594079?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-126594079-blog-83279312.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-126594079-blog-83279312.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2

posted @ 2022-10-19 15:50  海_纳百川  阅读(44)  评论(0编辑  收藏  举报
本站总访问量