Java 接口的基础语法 接口在开发中的作用

鳄鱼君

发表文章数:642

热门标签

, ,

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Java » Java 接口的基础语法 接口在开发中的作用

接口的基础语法

接口也是一种引用数据类
接口是完全抽象的,抽象类是半抽象的,或者也可以说几口是特殊的抽象类
接口定义:[修饰符列表] interface 接口名{};
接口编译之后也是一个字节码文件
接口支持多继承,一个接口可以基础多个接口,支持多继承
接口中只包含两部分内容,一部分是常量,一部分是抽象方法,没有其它内容!
接口中所有的元素都是public修饰的,都是公开的
接口中的抽象方法定义时,public abstract可以省略
接口中的方法都是抽象方法,所以接口中的方法不能有方法体
接口中的常量public static final可以省略不写


interface A{

}

interface B{

}
// 一个接口可以继承多个接口
interface C extends A,B{

}
public class InterfaceTest {
    public static void main(String[] args) {
        System.out.println(DoSome.AGE);
        System.out.println(DoSome.NAME);
    }
}

interface DoSome {
    // 常量
    public static final int AGE = 18;
    String NAME = "鳄鱼君";
    
    public abstract int sum(int a, int b);
    int sub(int a, int b);

}

类和类之间叫做继承(extends),类和接口之间叫做实现(implements),“实现”可以看作“继承”
当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现
接口中的方法都是public

interface DoSome {
    // 常量
    public static final int AGE = 18;
    String NAME = "鳄鱼君";

    public abstract int sum(int a, int b);
    int sub(int a, int b);

}

// 这样实现没有问题
abstract class Sum implements DoSome{
    
}

// 非抽象的类
class SumTest implements DoSome{
    // 实现接口中的方法
    public int sum(int a ,int b){
        return a + b;
    }
    public int sub(int a , int b){
        return a - b;
    }
}
public class InterfaceTest {
    public static void main(String[] args) {
        // 多态
        // 父类型的引用指向子类型的对象
        DoSome a = new Sum();
        // 调用接口中的方法,面向接口编程
        int result1 = a.sub(10,20);
        System.out.println(result1);
    }
}

interface DoSome {
    // 常量
    public static final int AGE = 18;
    String NAME = "鳄鱼君";

    public abstract int sum(int a, int b);
    int sub(int a, int b);

}

// 非抽象的类
class Sum implements DoSome{
    // 实现接口中的方法
    public int sum(int a ,int b){
        return a + b;
    }
    public int sub(int a , int b){
        return a - b;
    }
}

一个类可以同时实现多个接口,这种机制弥补了单继承带来缺陷。实现多个接口,就类似于多继承
无论向上转型还是向下转型,两种类型之间必须要有继承关系,没有继承关系编译器会报错,这句话不适应在接口方面
接口和接口之间在进行强制类型转换的时候,没有继承关系,也可以强转,但是在运行阶段可能会出现ClassCastException异常,最终需要加上instanceof运算符进行判断

public class InterfaceTest {
    public static void main(String[] args) {
        // 多态
        X x = new Z();
        Y y = new Z();

        x.m1();
        // 没有继承关系也可以进行强转
        X a = (X)y;
        // 判断
        if(y instanceof X){
            X a = (X)y;
        }
    }
}

interface X{
    public abstract void m1();
}
interface Y{
    public abstract void m2();
}
class Z implements X,Y{
    public  void m1(){
        System.out.println("m1.....");
    }
    public  void m2() {
        System.out.println("m2.......");
    }
}

继承和实现都存在的话,extends关键字在前,implements关键字在后:

public class Test {
    public static void main(String[] args) {
        Fly f1 = new Dog();
        f1.fly();
    }
}
// 接口
interface Fly{
    void fly();
}
// 动物类:父类
class  Animal{

}
// 动物类,子类
class Dog extends Animal implements Fly{
    public void fly(){
        System.out.println("一只可以飞的狗");
    }
}

接口在开发中的作用

接口在开发中的作用,类似多态在开发中的作用。
多态:面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力

// 菜单接口
interface FoodMenu {
    // 西红柿炒鸡蛋
    void XiHongShiChaoJiDan();
    // 鱼香肉丝
    void YuXiangRouSi();
}

// 中餐厨师,接口的实现者
// 实现菜单中的菜
class ChineseCook implements FoodMenu{
    public void XiHongShiChaoJiDan(){
        System.out.println("中餐厨师做的西红柿炒鸡蛋");
    }
    public void YuXiangRouSi(){
        System.out.println("中餐厨师做的鱼香肉丝");
    }
}
// 西餐厨师,接口的实现者
class AmericalCook implements FoodMenu{
    public void XiHongShiChaoJiDan(){
        System.out.println("西餐厨师做的西红柿炒鸡蛋");
    }
    public void YuXiangRouSi(){
        System.out.println("西餐师傅做的鱼香肉丝");
    }
}

// 顾客
class Customer{
    // 面向抽象编程,接口编程
    FoodMenu foodmenu;
    
    // 这样写,写死了
    // 中餐厨师
    AmericalCook americalcook;
    // 西餐厨师
    ChineseCook chinesecook
}

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

public class Test{
    public static void main(String[] args) {
        // 创建厨师对象
        FoodMenu cook1 = new ChineseCook();
        FoodMenu cook2 = new AmericalCook();
        // 创建顾客对象
        Customer cus1 = new Customer(cook1); //中餐
        Customer cus2 = new Customer(cook2); //西餐
        // 顾客点菜
        cus1.order();

    }
}
// 菜单接口
interface FoodMenu {
    // 西红柿炒鸡蛋
    void XiHongShiChaoJiDan();
    // 鱼香肉丝
    void YuXiangRouSi();
}

// 中餐厨师,接口的实现者
// 实现菜单中的菜
class ChineseCook implements FoodMenu{
    public void XiHongShiChaoJiDan(){
        System.out.println("中餐厨师做的西红柿炒鸡蛋");
    }
    public void YuXiangRouSi(){
        System.out.println("中餐厨师做的鱼香肉丝");
    }
}
// 西餐厨师,接口的实现者
class AmericalCook implements FoodMenu{
    public void XiHongShiChaoJiDan(){
        System.out.println("西餐厨师做的西红柿炒鸡蛋");
    }
    public void YuXiangRouSi(){
        System.out.println("西餐师傅做的鱼香肉丝");
    }
}

// 顾客
class Customer{
    // 面向抽象编程,接口编程
    private FoodMenu foodmenu;

    // 构造方法
    public  Customer(){
    }
    public Customer(FoodMenu foodmenu) {
        this.foodmenu = foodmenu;
    }

    // setter和getter
    public FoodMenu getFoodmenu() {
        return foodmenu;
    }
    public void setFoodmenu(FoodMenu foodmenu) {
        this.foodmenu = foodmenu;
    }

    // 点菜
    public void order(){
        FoodMenu or = this.getFoodmenu();
        or.XiHongShiChaoJiDan();
        or.YuXiangRouSi();
    }
}

类型和类型之间的关系:is a(继承关系)、has a(关联关系,通过以“属性”形式存在)、like a(实现关系,通常是类实现接口)

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Java 接口的基础语法 接口在开发中的作用》 发布于2020-08-10

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

2 + 6 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册