Java中的“特殊的抽象类”——接口

324 阅读3分钟

这是我参与更文挑战的第5天,活动详情查看: 更文挑战

接口

在学习接口之前我们同样要问自己两个问题

1.什么是接口?

2.接口用来干什么?

首先让我们来回答第一个问题:什么是接口?

可以说接口是一种“特殊的抽象类”。接口中不能包含普通方法,所有的方法都需要是抽象方法。但java8
中接口有了些改动,允许在接口中定义默认方法,默认方法可以有方法体。
接口是从多个类中抽象出来的规范,这意味着接口里通常定义的是一组公用方法,接口不提供任何实现。

接口的定义

和定义类有些不同,接口通过interface关键字来定义。

public interface 接口名 extends 父接口1,父接口2{//也可以米有父接口
    常量1;
    常量2;
    //也可以没有常量
    抽象方法1;
    抽象方法2;
    .......//也可以没有抽象方法
}
/*
修饰符public如果省略,则默认采用包访问权限。
*/
/*
1.接口中的成员变量默认使用public static fianl来修饰,因此接口中只能定义常量,不能定义变量,
并且常量在定义时就要初始化。
2.接口中的方法如果不是默认方法或类方法,默认使用public abstract 来修饰。
3.接口中的所有成员均是public访问权限,因此在重写接口中的方法时一定不能省略public
*/

下面我们来看一个具体例子

public interface InterfaceA {
	public static int MAX_NUMBER=100000;//常量
	public void speak(String s);//抽象方法,默认使用abstract修饰
	public static void show(){
		System.out.println("我是类方法,必须要有方法体");
	}
	public default void Print(){
		System.out.println("我是默认方法,必须要有方法体");
	}
}

接下来我们看第二个问题,接口能用来干什么?

总结起来接口主要有如下用途:

  1. 定义变量

  2. 调用其他接口中定义的常量

  3. 被其他类实现。

我们来看一个具体代码来分析

public interface InterfaceA {
	public static int MAX_NUMBER=100000;//常量
	public void speak(String s);//抽象方法,默认使用abstract修饰
	public static void show(){
		System.out.println("我是类方法,必须要有方法体");
	}
	public default void Print(){
		System.out.println("我是默认方法,必须要有方法体");
	}
}

import java.util.Scanner;

public  class Test implements InterfaceA {
	public Test(){
	}
	public void speak(String s){//权限只能是public
		System.out.println(s);
	}
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		Test test=new Test();//test中有重写的speak方法,默认的Print方法
		test.speak("我是重写的方法");
		test.Print();
		InterfaceA A=new Test();//A是上转型对象,A只能调用父类中的方法即Print()和show()方法,和子类重写的方法
		A.Print();
		A.speak("我是上转型对象");
		InterfaceA.show();//类变量和类方法通过类名来调用。
		System.out.println(MAX_NUMBER);
	}
}

充分利用接口可以极好的降低程序各模块之间的耦合,从而提高系统的可扩展性和可维护性。

关于接口的一些特点我们就学习到这里,如果以上内容有错误或遗漏之处,欢迎大家留言指正!

/* 关于接口和抽象类的一些区别和联系,建议大家去b站观看学习。*/