Java基础-接口
来源:互联网 发布:复旦大学经济学院 知乎 编辑:程序博客网 时间:2024/06/03 13:14
- 接口的定义与使用
- 抽象类的使用
- 接口与抽象类的区别
1接口的定义与使用
1.1接口的定义
接口(英文:Interface),在Java编程语言中是一个抽象类型,是抽象方法的集合。
一个接口往往只有方法的特征没有方法的实现,因此这些方法可以在不同的类实现时,可以具有不同的行为。接口把方法的特征和方法的实现分割开来,这种分割体现在接口常常代表一个角色(Role),它包装了与该角色相关的操作和属性,而实现这个接口的类便扮演这个角色的演员(类)。一个角色(接口)可以由不同的演员(类)来演,不同的演员(类)之间除了扮演一个共同的角色(接口)之外,并不要求有任何其他的共同之处。
接口定义的一般形式:
[接口修饰符] interface <接口名> {
//成员变量和方法的声明
}
/** * 这是一个接口实例 * @author xiang * */public interface Test {public static final int num = 2; //成员常量具有固定的修饰符:public static finalint num2 = 8;public abstract void method1(); //成员函数具有固定的修饰符:public abstract String getStr();default void defaultMethod(){//接口默认的方法,Java 8带来的特性,接口也可以包含行为,而不仅仅是方法签名System.out.println("这是接口的默认方法");}static void staticMethod(){//static方法System.out.println("这是接口的static方法");}}
1.2 接口的特性
接口里的成员变量默认是public static final类型的,即使不使用这些修饰符修饰成员变量,也会在编译的时候加上。必须被显示初始化,即接口中的成员变量为常量;
接口不能声明为final的,因为final类型必须要实现。接口也不是类,不能使用new运算符实例化一个接口;
一个接口不能实现(implements)另一个接口,但接口可以实现多层继承和多继承,接口与接口之间可以是继承关系;
在Java8中,接口可以有默认的方法(用default关键字),也就是说接口也可以包含行为,而不仅仅是方法签名。默认的方法可以在类的实现里选择性的重写
接口中也可以用static关键字修饰方法,用static修饰的方法必须要有方法体
对于接口中的固定修饰符,可以省略
当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类
不允许创建接口的实例(实例化),但允许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例
1.3 接口的使用
public class Demo implements Test {@Overridepublic void method1() {System.out.println("执行了方法method1");}@Overridepublic String getStr() {return null;}@Overridepublic void defaultMethod() {//Test.super.defaultMethod();//.......}public static void main(String[] args) {Test t1 = new Demo();//接口的一个实现t1.method1();Test t2 = new Test() {@Overridepublic void method1() {// TODO Auto-generated method stubSystem.out.println("执行了方法method1....");}@Overridepublic String getStr() {// TODO Auto-generated method stubreturn null;}};t2.method1();}}
1.4 在Java9中的私有接口方法
Java8中有接口的默认方法,若接口上有多个默认方法,代码又几乎相同,会发生什么情况?通常将会重构这些方法,调用一个可复用的私有方法,但是接口中的默认方法不能是私有的,将复用代码创建为一个默认方法不是一个解决方案,因为该辅助方法为成为公共API的一部分。使用Java9,可以向接口添加一个私有辅助方法来解决此问题
public interface MyInterface {void nomalInterfaceMethod();default void interfaceMethodWithDefault(){init();}default void anotherDefaultMethod(){init();}//this method is not part of the public API exposed by MyInterfaceprivate void init(){System.out.println("Initializing");}}
2 抽象类的使用
抽象类和一般的类很相似,只是在类中存在一些没有方法体的方法,即抽象方法。抽象类需要其他类继承来实现抽象类中的方法,以及给出更多的方法。抽象类有如下特点:
抽象类一般在父类中使用,而它的子类实现父类中的抽象方法;
如果父类有一个或多个抽象方法,那么父类就必须是抽象类;
抽象类里的抽象方法没有方法体,子类要实现父类所有的抽象方法。如果有部分抽象方法没有实现,则子类也必须为抽象类;
所有的抽象方法都必须声明在抽象类中,抽象类里的抽象方法只有在子类实现之后才能使用;
抽象类中允许有抽象方法和普通方法。
3 接口与抽象类的区别
1)抽象类中往往有一个或多个抽象方法,接口中的方法一般全部被修饰为抽象方法,接口里的方法默认修饰为public abstract类型的
2)如果抽象类的子类有一个没有实现的抽象方法,那么这个类必须是抽象类。一个类只能继承一个抽象类,而一个类却可以实现多个接口。
3)抽象类中的成员变量可以是各种类型的,而接口中的成员只能是 public static final 类型的常量。
- 【Java基础】Java接口
- [Java基础]Java接口
- Java基础 - 接口
- java基础----接口
- Java基础----接口
- Java基础_接口
- Java基础复习:接口
- java基础_03_接口
- Java接口基础
- java基础之接口
- java基础-接口
- JAVA基础之接口
- Java基础---接口
- java基础--接口、多态
- java 基础 接口
- JAVA基础----接口
- java基础之接口
- JAVA基础之接口
- Vim命令
- 优先级队列
- (broadcast,intent,intentfilter消息广播)(interface接口,回调函数)(eventBus)区别,适用场合
- 说一说本人对linux系统学习的方法和经验
- C++异常
- Java基础-接口
- 【Java学习笔记】17.异常处理
- 谷歌打不开,怎么办?谷歌chrome应用商店发布的谷歌白领助手,免费打开google和谷歌学术
- ubuntu nfs常见错误解决方法
- 面向硬件编程的一些思考
- UML类图几种关系的总结
- 开源12通道2.4G遥控制作-发射机
- Linux 系统操作简记 -- 修改Ubuntu apt-get 与 pip更新源,提高安装速度
- 设置linux服务器时间与网络同步