1. 接口:接口是java中最重要的概念,接口可以理解为一种特殊的类,里面全部都是由全局变量和公共的抽象方法组成。
通俗说就是一个类如果完全由全局常量(final和static声明)和抽象方法组成,就可以定义为一个接口。
2. 接口定义格式
interface 接口名称{
全局常量;
抽象方法;
}
举例:
interface Demo{//定义接口
public static final String name = "nishuibaichuan";//全局常量
public abstract void fun();//抽象方法
public abstract String getName();//抽象方法
}
以上代码可以简化为以下代码:
interface Demo{//定义接口
String name = "nishuibaichuan";//全局常量
void fun();//抽象方法
String getName();//抽象方法
}
从上面的抽象可以发现,接口是由全局常量和抽象方法组成的,系统会默认将属性定义为public static final ,而将方法默认定义为 public abstract 。
3. 实现接口
与抽象类一样, 接口要使用也必须通过子类,子类(如果不是抽象类的话)必须覆写全部抽象方法, 子类通过 implements关键字实现接口 。一个子类可以同时实现多个接口。
实现格式:
class 子类 implements 接口A , 接口B,,,,{
}
举例:
public class Interface {
public static void main(String[] args) {
DemoTest demoTest = new DemoTest();
System.out.println(demoTest.getName());
demoTest.fun();
}
}
interface Demo{//定义接口
public static final String name = "nishuibaichuan";//全局常量
public abstract void fun();//抽象方法
public abstract String getName();//抽象方法
}
interface Test{
public void say();//实现抽象方法
}
class DemoTest implements Demo,Test{
public void say(){
System.out.println("hello,world!!!");
}
public String getName(){
return "HELLO";
}
public void fun(){
System.out.println("姓名:" + name);
}
}
运行结果:
HELLO
姓名:nishuibaichuan
4. 继承抽象类实现接口
一个子类可以同时继承抽象类和实现接口。
格式如下:
class 子类 extends 抽象类 implements 接口A,接口B,,,{}
举例:
public class Interface1 {
public static void main(String[] args) {
X1 x1 = new X1();
x1.fun();
x1.say();
}
}
interface Test1{//接口
public String name = "逆水百川";//默认为public static final
public void fun();//默认为抽象方法
public String getName();//默认为抽象方法
}
abstract class Demo1{//抽象类
public abstract void say();//抽象方法
}
class X1 extends Demo1 implements Test1{
public void say(){
System.out.println("hello,world!!!");
}
public String getName(){
return name;
}
public void fun(){
System.out.println("姓名:" + name);
}
}
运行结果:
姓名:逆水百川
hello,world!!!
5. 一个抽象类可以实现多个接口,那么对于抽象类的子类则就必须同时覆写接口和抽象类中定义的所有方法。接口不能继承抽象类,但是抽象类可以实现接口。
举例:
public class Interface2 {
public static void main(String[] args) {
X2 x2 = new X2();
x2.fun();
x2.say();
}
}
interface Test2{//接口
public String name = "逆水百川@";//默认为public static final
public void fun();//默认为抽象方法
public String getName();//默认为抽象方法
}
abstract class Demo2 implements Test2{//抽象类
public abstract void say();//抽象方法
}
class X2 extends Demo2 {
public void say(){
System.out.println("hello,world!!!");
}
public String getName(){
return name;
}
public void fun(){
System.out.println("姓名:" + name);
}
}
运行结果:
姓名:逆水百川@
hello,world!!!
6. 一个接口虽然不能继承抽象类,但是在java中一个接口可以同时继承多个接口
实现接口的多继承(通过接口实现多继承!!!)
格式:
interface 子接口 extends 父接口A,父接口B,........{}
举例:
public class Interface3 {
public static void main(String[] args) {
A6 a6 = new A6();
a6.fun1();
a6.fun2();
a6.fun3();
}
}
interface A3{
public void fun1();
}
interface A4{
public void fun2();
}
interface A5 extends A3,A4{
public void fun3();
}
class A6 implements A5{
public void fun1(){
System.out.println("我是fun1()");
}
public void fun2(){
System.out.println("我是fun2()");
}
public void fun3(){
System.out.println("我是fun3(),我们的A6实现了A5接口,A5接口实现了多继承!");
}
}
运行结果:
我是fun1()
我是fun2()
我是fun3(),我们的A6实现了A5接口,A5接口实现了多继承!
7.总结
(1)接口是一个特殊的类,只包含全局常量和抽象方法。而接口中的抽象方法可以不加入abstract,而抽象类中的抽象方法必须加入abstract关键字声明。
(2)一个类只能继承一个父类,但是可以同时实现多个接口。
(3)一个接口可以同时继承多个接口,以实现接口的多继承。
(4)接口和抽象类一样,都必须依靠子类。
(5)一个抽象类可以实现多个接口,但是一个接口不能继承抽象类。