您的位置:首页 > 编程语言 > Java开发

Java - 接口 Interface

2020-01-15 12:00 2376 查看

接口:一种公用的规范标准
     只要符合规范标准,大家可以通用

接口定义:
      接口是一种引用数据类型,最重要的是其中的抽象方法.(abstract)   - 抽象方法对标C++中的虚函数
定义接口的格式:
      public interface 接口名称{
          //接口内容
      }
备注:字节码文件仍然是  .java - > .class
接口中包含的内容:
     java7: 1.常量 2.抽象方法
     java8: 3.默认方法 4.静态方法
     java9: 5.私有方法

Java接口的抽象方法:
/*
 * 在任何版本Java中,接口都能定义抽象方法
 * 格式:
 * public abstract 返回值类型 方法名称(参数);
 * */

[code]package demo02;
//定义:public interface 名字
public interface  MyInterface {
//定义了一个抽象方法
public abstract void methodAbd();
//接口中的抽象方法,必须有固定关键字public abstract
}

 Java接口的使用:
/*
 * 格式:
 * public class 实现类名称 implements 接口名称{
 *     //....public ,class他们俩可以适当的省略
 * }
 * 1.接口不能直接使用,必须有一个实现类,来简洁实现该接口
 * 2.接口的实现类,必须覆盖重写(实现)接口中所有的抽象方法
 *         具体操作:复制所有抽象方法,去掉abstract 加上花括号
 * 3.创建实现类的对象,并进行使用

implements  v.使生效,执行 n.工具
 * */

[code]package demo02;

//定义了一个接口interface
public interface  MyInterface {
//定义了一个抽象方法
public abstract void methodAbd();
//接口中的抽象方法,必须有固定关键字public abstract
public void methodAbd1();
abstract void methodAbd2();
void methodAbd3();
}

//定义了一个class MyInterfaceImpl类,用于执行接口MyInterface
public class MyInterfaceImpl implements MyInterface  {
public void methodAbd() {
System.out.println("第一个方法调用");
}
public void methodAbd1() {
System.out.println("第二个方法调用");
}
public void methodAbd2() {
System.out.println("第三个方法调用");
}
public void methodAbd3() {
System.out.println("第四个方法调用");
}
}

//主函数中通过具体类 MyInterfaceImpl,创建对象imp1,然后对象调用对应的方法
public class Main_Class {
public static void main(String[] args) {
//MyInterface inter = new MyInterface();//错误写法
MyInterfaceImpl imp1 = new MyInterfaceImpl();
imp1.methodAbd();
imp1.methodAbd1();
imp1.methodAbd2();
imp1.methodAbd3();
}
}

default n / v 默认,违约
从Java8开始,接口允许定义默认方法;
用途:接口中的默认方法,可以解决接口升级问题,默认方法含有方法体
格式:
public default 返回值类型 方法名称(参数){
                 方法体;
}
升级接口的解释:
比如我一开始定义了一个接口,接口中有一个抽象方法methodAbs,然后我在这个接口的基础上新建了两个类,这两个类都重写(继承的感觉)了接口中所有的抽象方法,并且投入使用。现在我给接口升级,新添加了一个抽象方法methodNew,此时倘若不采取措施,已经投入使用的两个类就会报错,所以我们采用定义接口的默认方法,在不影响已经投入使用类的基础上,增加新的方法

接口的默认方法,可以通过具体类直接调用。(通过继承接口中的默认方法,在类创建的对象中直接调用默认方法)
接口的默认方法也可以被重写,这样只能调用类中重写的方法了

[code]package demo02;

public interface  MyInterface {
//定义了一个抽象方法
public abstract void methodAbd();
//接口中的抽象方法,必须有固定关键字public abstract
public void methodAbd1();
abstract void methodAbd2();
void methodAbd3();

//新添加的方法methodNew
public default void methodNew() {
System.out.println("这是新方法");
}
}

package demo02;

public class MyInterfaceImpl implements MyInterface  {
public void methodAbd() {
System.out.println("第一个方法调用");
}
public void methodAbd1() {
System.out.println("第二个方法调用");
}
public void methodAbd2() {
System.out.println("第三个方法调用");
}
public void methodAbd3() {
System.out.println("第四个方法调用");
}
}

package demo02;

public class MyInterfaceImplB implements MyInterface  {
public void methodAbd() {
System.out.println("第一个方法调用");
}
public void methodAbd1() {
System.out.println("第二个方法调用");
}
public void methodAbd2() {
System.out.println("第三个方法调用");
}
public void methodAbd3() {
System.out.println("第四个方法调用");
}
public void methodNew() {
System.out.println("我把默认方法在具体类中重写了");
}
}

package demo02;

public class Main_Class {
public static void main(String[] args) {
//MyInterface inter = new MyInterface();//错误写法
MyInterfaceImpl imp1 = new MyInterfaceImpl();
imp1.methodAbd();
imp1.methodAbd1();
imp1.methodAbd2();
imp1.methodAbd3();

imp1.methodNew();
//注意 :具体实现的类中是没有methodNew()方法的,这里是继承的接口的默认方法
System.out.println("=============================");
MyInterfaceImplB imp2 = new MyInterfaceImplB();
imp2.methodNew();
}
}

 

  • 点赞
  • 收藏
  • 分享
  • 文章举报
AKUANer 发布了65 篇原创文章 · 获赞 0 · 访问量 1095 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: