先赞后看,养成习惯!!! ^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持下去的动力,点赞后不要忘记关注我哦
个人主页:伯明翰java
文章专栏:JavaSE
如有错误,请您指正批评 ^ _ ^
接口概念
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
在Java中,接可以看成是:多个类的公共规范,是⼀种引⽤数据类型。
接口的特点
- 接类型是⼀种引⽤类型,但是不能直接new接的对象
java
public class TestUSB {
public static void main(String[] args) {
USB usb = new USB();
}
}
- 接中每⼀个⽅法都是public的抽象⽅法,即接中的⽅法会被隐式的指定为publicabstract(只能是publicabstract,其他修饰符都会报错
- 接中的⽅法是不能在接中实现的,只能由实现接的类来实现
- 接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图。
- 如果一个类实现了一个接口中要求的所有的方法,然而没有提供方法体而仅仅只有方法标识,那么这个类一定是一个抽象类.
- 接中可以含有变量,但是接中的变量会被隐式的指定为publicstaticfinal变量
- 接中不能有静态代码块和构造⽅法
为什么要用接口
- 接口被用来描述一种抽象。
- 因为Java不像C++一样支持多继承,所以Java可以通过实现接口来间接实现多继承。
- 接口也被用来实现解耦
接口间的继承
在Java中,类和类之间是单继承的,⼀个类可以实现多个接,接与接之间可以多继承。即:⽤接可以达到多继承的⽬的。
接可以继承⼀个接,达到复⽤的效果.使⽤extends关键字.
java
interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
}
class Frog implements IAmphibious {
...
}
接口的使用
接使⽤实例
- 使⽤Comparable接
java
class Student implements Comparable {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public String toString() {
return "[" + this.name + ":" + this.score + "]";
}
@Override
public int compareTo(Object o) {
Student s = (Student)o;
if (this.score > s.score) {
return -1;
} else if (this.score < s.score) {
return 1;
} else {
return 0;
}
}
}public class Test {
public static void main(String[] args) {
Student s1 = new Student("zhangsan",10);
Student s2 = new Student("lisi",20);
System.out.println(s1.compareTo(s2) );
}
}
如果s1⼤于s2那么返回⼤于0的数字,如果相同返回0,否则返回⼩于0的数字。
- 使⽤Comparator接
java
class Student {
public String name;
public int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public String toString() {
return "[" + this.name + ":" + this.score + "]";
}
}
class ScoreComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.score-o2.score;
}}
class NameComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.name.compareTo(o2.name);
}
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student("zhangsan",10);
Student s2 = new Student("lisi",20);
//根据分数进⾏⽐较
ScoreComparator scoreComparator = new ScoreComparator();
System.out.println(scoreComparator.compare(s1, s2));
//根据姓名进⾏⽐较
NameComparator nameComparator = new NameComparator();
System.out.println(nameComparator.compare(s1, s2));
}
}
抽象类和接的区别
核⼼区别:抽象类中可以包含普通⽅法和普通字段,这样的普通⽅法和字段可以被⼦类直接使⽤(不必重写),⽽接中不能包含普通⽅法,⼦类必须重写所有的抽象⽅法.