在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口。
interface Idemo1 {
public abstract void way1();
}
interface Idemo2{
void way2();
}
class test1 implements Idemo1,Idemo2{
@Override
public void way1() {
System.out.println("实现了第一个接口Idemo1");
}
@Override
public void way2() {
System.out.println("实现了第二个接口Idemo2");
}
}
🍱🍱这样写代码的好处就是典型的面向对象思想的编程,对比我们的继承思想,继承表达的含义是 is - a 语义, 而接口表达的含义是 具有 xxx 特性 。这样设计有什么好处呢? 时刻牢记多态的好处, 让程序员忘记类型. 有了接口之后, 类的使用者就不必关注具体类型,而只关注某个类是否具备某种能力。
🛩️🛩️六、接口间的继承
在Java中,类和类之间是单继承的,一个类可以实现多个接口,接口与接口之间可以多继承。即:用接口可以达到多继承的目的。
这里我们就定义了接口Idemo3继承了接口Idemo1和接口Idemo2。
interface Idemo1 {
public abstract void way1();
}
interface Idemo2{
void way2();
}
interface Idemo3 extends Idemo1,Idemo2{
}
🚞🚞七、 接口使用实例
我们知道,在我们之前的学习过程中,我们知道整数通过大小来比较,字符串比较首字母的大小顺序,那么我们定义一个学生类,这个学生类有两个属性age和name,把他们放在一起,按照我们之前的理解,idea自带的比较方法Arrays.sort()能否实现比较呢?那么又是根据什么来比较的呢?是姓名还是年龄呢?🍶🍶
class Student {
public String name;
public int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
🍶再定义一个学生数组,对这个对象数组中的元素进行排序。
public class Test1 {
public static void main(String[] args) {
Student[] stu = new Student[3];
stu[0] = new Student("xiaohu",18);
stu[1] = new Student("zhangsan",19);
stu[2] = new Student("xiaoming",20);
Arrays.sort(stu);
System.out.println(Arrays.toString(stu));
}
}
🍰🍰解决方案;
让我们的 Student 类实现 Comparable 接口, 并实现其中的 compareTo 方法。
🍣步骤1:首先我们需要实现 Comparable 接口,注意书写格式,Comparable<类名>。
🍜2.写完之后我们发现编译器还是报错,我们可以在报错的地方鼠标右键。
🍋3.根据提示操作
🍌4.点击这里。
结果:我们可以看到系统自动生成了compare To方法。
🍞🍞那么生成了这个方法,我们就可以来设计比较的根据,比如这里我们想让学生类通过他们的年龄来比较,我们可以在compareTo 方法里实现我们的想法:
@Override
public int compareTo(Student o){//在这个接口中实现compare To 方法
if(this.age - o.age > 0){
return 1;
}else if(this.age - o.age < 0){
return -1;
}
else{
return 0;
}
}
运行结果:
即我们如果想比较,必须要指定我们的比较根据,比如年龄或者姓名,通过compareTo 方法就很好的实现了我们的功能。
🚎🚎八、抽象类和接口的区别
🍏🍏1:成员区别
抽象类:
构造方法:有构造方法,用于子类实例化使用。
成员变量:可以是变量,也可以是常量。
成员方法:可以是抽象的,也可以是非抽象的。
接口:
构造方法:没有构造方法。
成员变量:只能是常量。默认修饰符:public static final。
成员方法:jdk1.7只能是抽象的。默认修饰符:public abstract 。
jdk1.8可以写以default和static开头的具体方法。
🍊🍊2:类和接口的关系区别
类与类:
继承关系,只能单继承。可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
类还可以在继承一个类的同时实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。
🍅🍅3:体现的理念不同
抽象类里面定义的都是一个继承体系中的共性内容。
接口是功能的集合,是一个体系额外的功能,是暴露出来的规则。