抽象-接口

接口

JAVA是只支持单继承的,但可以多实现,也就是类可以实现多个接口

接口是一种规则,是一种约束,使用者必须按照其规定使用。比如usb接口可以为设备间提供快速传输,也可以供设备充电,使用者必须要有一个usb接口,不能是两脚的插头或三脚的;要想使用使用3.0的传输效率,接口就必须要遵守协议。

比起抽象类,接口更抽象。在接口中,没有构造器,方法都是抽象的,不提供任何实现。接口中不能定义变量,所有的变量必须以public static final修饰,也就是所有的属性都是静态常量。接口同抽象类一样不能实例化

1.声明与实现

像声明类一样,class是声明类的关键字,而interface是声明接口的关键字;实现接口也像继承类一样,extends是继承,implements是实现;实现要写在继承后面。

public interface JavaInterFace{
    public abstract void methods();
    void run();//默认修饰public abstract
}

//接口的实现类名称一般会以Int结尾
public class TypeClass Intextends Object  implements JavaInterFace{
    @Override
    public void Methods(){
        //code
    }
}

接口中,所有的方法默认被public abstract修饰,所有的变量默认被public static final修饰

接口与接口间也可以继承,实现子接口的类要重写所有接口的抽象方法

public interface A{ void TestA();}
public interface B{ void testB();}
public interface C extends A,B{ void testC(); }

public class Test implements C{
    @Override
    public void testA(){}
    @Override
    public void tetsB(){}
    @Override
    public void TetsC(){}
}

public class TestB implements B{
    @Override
    public void tetsB(){}
}

public static void main(String[] args){
    C c = new Test();
    System.out.println(c instanceof A);
    System.out.println(c instanceof B);
    System.out.println(c instanceof C);
    System.out.println(c instanceof Test);
    System.out.println(c instanceof Object);
    System.out.println(c instanceof TestB);
    System.out.println(c instanceof Student);
    System.out.println(c instanceof String);//编译报错,String是一个final修饰的类
}
/**
true
true
true
true
true
true
false

Process finished with exit code 0
*/

var instanceof TypeClass,如果var是一个接口引用类型的变量,那只要TypeClass不是一个final修饰的类,这个代码就行通过编译。至于其执行的结果就要看var所指向的实际类型,是不是var引用类型的子类或实现类

2.作用

  1. 规范化,对实现接口的类必须重写实现其抽象方法
  2. 统一访问,虽然接口不能实例化,但接口可以作为引用类型,定义指向其实现类的对象Interface var = new classtype(),这样在需要调用不同实现类的方法时,也可以不用改变大量的代码,因为不同实现类其内部的功能也大致相同(都是实现同一个接口),需要调用不同类时,只需改变classtype即可,

3.Java8

在Java 8前,接口中只能包含抽象方法;而在Java 8允许接口可以具有静态方法和默认方法

public interface InerfaceBace{
    void test();
    default void go(){
        System.out.println("InerfaceBace.defaultGo()!!");
    }
    static void to(){
        System.out.println("InerfaceBace.staticTo()!!!");
    }
}
public class InterfaceBaceInt implements InterfaceBace{
    void test(){
        //code
    }
}

InerfaceBace bace = new InerfaceBaceInt();
bace.go();
InerfaceBace.to();
/*
InerfaceBace.defaultGo()!!
InerfaceBace.staticTo()!!!

Process finished with exit code 0
*/

接口的静态方法也可以通过接口名去调用InterfaceType.methods();默认方法即通过引用该接口类型的对象去调用(多态)


posted @   hello_12153_98  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示