java接口
Posted 爽走不解释
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java接口相关的知识,希望对你有一定的参考价值。
接口的定义(Interface)
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口到底TM用来干嘛的???
接口就是抽象类的延伸,java为了保证数据安全是不能多重继承的,也就是说继承只能存在一个父类,但是接口不同,一个类可以同时实现多个接口,不管这些接口之间有没有关系,所以接口弥补了抽象类不能多重继承的缺陷,但是推荐继承和接口共同使用,因为这样既可以保证数据安全性又可以实现多重继承。
接口的特点
1、接口的方法声明必须是 public abstract 即便不写默认也是
2、接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
3、接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
4、接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
5、接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
6、接口中的方法都是公有的。
回顾一下抽象类:
1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
2、抽象方法必须由子类来进行重写。
3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。
4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
5、子类中的抽象方法不能与父类的抽象方法同名。
6、abstract不能与final并列修饰同一个类。
7、abstract 不能与private、static、final或native并列修饰同一个方法。
然后来区别一下抽象类和接口:
1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
再来区别一下接口和类:
1、接口不能用于实例化对象。
2、接口没有构造方法。
3、接口中所有的方法必须是抽象方法。
4、接口不能包含成员变量,除了 static 和 final 变量。
5、接口不是被类继承了,而是要被类实现。
6、接口支持多继承。
接口声明的语法:
public interface 接口名称 [extends 其他的接口名] //注意 接口可以继承其他接口
// 声明变量
// 抽象方法
比如:
public interface Animal
public void eat();
public void travel();
接口的实现:
当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。
语法:
public class 类名 implements 接口名称, 其他接口名称, 其他接口名称..., ...
实例:
public class MammalInt implements Animal
public void eat()
System.out.println("Mammal eats");
public void travel()
System.out.println("Mammal travels");
public int noOfLegs()
return 0;
public static void main(String args[])
MammalInt m = new MammalInt();
m.eat();
m.travel();
输出结果:
Mammal eats
Mammal trave
接口的含义理解
接口可以理解成统一的协议, 而接口中的属性也属于协议中的内容。但是接口的属性都是公共的,静态的,最终的。
接口的成员特点:
1、成员变量只能是常量,默认修饰符 public static final
2、成员方法只能是抽象方法。默认修饰符 public abstract
所以,Java 接口中,使用变量的时候,变量必须被赋值。
//所以接口定义属性
public interface People
int age=10;
String name="输出名字"; // 接口里面定义的成员变量都是 public static final 修饰
public void eat();
所有的变量必须给出初始值,且绝对不会被修改,因为隐藏的修饰符为 public static final。
接口的继承
一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。
下面的Sports接口被Hockey和Football接口继承:
// 文件名: Sports.java
public interface Sports
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
// 文件名: Football.java
public interface Football extends Sports
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
// 文件名: Hockey.java
public interface Hockey extends Sports
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
Hockey接口自己声明了四个方法,从Sports接口继承了两个方法,这样,实现Hockey接口的类需要实现六个方法。
相似的,实现Football接口的类需要实现五个方法,其中两个来自于Sports接口。
接口的多继承
在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。
如:
public interface Hockey extends Sports, Event
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 Sports及 Event 可能定义或是继承相同的方法
最后回顾一遍接口的重点
1、我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的,这样怎么可能产生具体的实例呢?但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。
2、一个类可以实现不止一个接口。
3、一个接口可以继承于另一个接口,或者另一些接口,接口也可以继承,并且可以多继承。
4、一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法。
5、接口中所有的方法都是抽象的和public的,所有的属性都是public,static,final的。
6、接口用来弥补类无法实现多继承的局限。
7、接口也可以用来实现解耦
欢迎留言评论
以上是关于java接口的主要内容,如果未能解决你的问题,请参考以下文章