一.接口概述
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
继续回到我们的猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了。
但是,现在有很多的驯养员或者是驯兽师,可以训练出:猫钻火圈,狗跳高,狗做计算等。而这些额外的动作,并不是所有猫或者狗一开始就具备的,这应该属于经过特殊的培训训练出来的。
所以,这些额外的动作定义到动物类中就不合适,也不适合直接定义到猫或者狗中,因为只有部分猫狗具备这些功能。
所以,为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些猫狗需要被训练,只需要这部分猫狗把这些额外功能实现即可。
二.接口的特点
接口的特点:
- 接口格式
public interface 接口名 {}
类实现接口 (用 implements 表示)
public class 类名 implements 接口名 {}
- 特点
1)接口不能实例化
2)那么,接口如何实例化呢?
按照多态的方式,由具体的实现类实例化。其实这也是多态的一种,接口多态。
3)接口的实现类
要么是抽象类
要么重写接口中的所有抽象方法
代码:
interface1
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 跳高接口 接口的特点
*
*/
public interface interface1 {
//抽象方法
public abstract void jump();
}
interface2
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 跳高接口的实现类-猫类 接口的特点
*
*/
public class interface2 implements interface1 {
@Override
public void jump() {
System.out.println("猫可以跳高了");
}
}
interface3
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 跳高接口的实现类-狗类 接口的特点
*
*/
public abstract class interface3 implements interface1 {
}
interface4
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 跳高接口的实现类-测试类 接口的特点
*
*/
public class interface4 {
public static void main(String[] args) {
//C:接口不能实例化
//interface1 i1 = new interface1();
//c1:参照多态的形式使用实现类来实例化。
interface1 jumpping = new interface2();
jumpping.jump();//猫可以跳高了
}
}
三. 接口的成员特点
成员变量:
只能是常量
默认修饰符 public static final
构造方法:
没有,因为接口主要是扩展功能的,而没有具体存在
成员方法:
只能是抽象方法
默认修饰符 public abstract
代码:
interface5
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 接口类 接口的成员特点
*
*/
public interface interface5 {
public int num1 = 10;
public final int num2 = 20;
public static final int num3 = 30;
//接口没有构造器
//public interface5() {}
//接口不能有方法体
//public void show() {}
//接口的抽象方法
public abstract void method();
}
interface6
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 接口类的实现类 接口的成员特点
*
*/
public class interface6 implements interface5 {
public interface6() {
super();
}
@Override
public void method() {
}
}
interface7
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 接口类的测试类 接口的成员特点
*
*/
public class interface7 {
public static void main(String[] args) {
//按照多态的形式创建接口对象
interface6 i1 = new interface6();
//interface5.num1 = 30; //无法为最终变量num1分配值
//System.out.println(i1.num);
//i.num2 = 40;//无法为最终变量num2分配值
//System.out.println(i.num2);
System.out.println(interface6.num1);//10
System.out.println(interface6.num2);//20
}
}
四. 类与类类与接口接口与接口的关系
类与类:
继承关系,只能单继承,但是可以多层继承
类与接口:
实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口
接口与接口:
继承关系,可以单继承,也可以多继承
代码:
interface8
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 父类接口1 类与类_类与接口_接口与接口的关系
*
*/
public interface interface8 {
}
interface9
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 父类接口2 类与类_类与接口_接口与接口的关系
*
*/
public interface interface9 {
}
interface10
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 子类1 类与类_类与接口_接口与接口的关系
*
*/
public class interface10 extends Object implements interface8,interface9 {
}
interface11
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 子类2 类与类_类与接口_接口与接口的关系
*
*/
public class interface11 extends interface10 implements interface8,interface9 {
}
interface12
package Java_study;
/**
*
* @author 只是甲
* @date 2021-06-28
* @remark 测试类 类与类_类与接口_接口与接口的关系
*
*/
public class interface12 {
public static void main(String[] args) {
//实例化对象
interface11 sister = new interface11();
//c1:参照多态的形式使用实现类来实例化。
interface8 son = new interface10();
}
}
五. 抽象类与接口的区别
-
成员区别
抽象类:
1)成员变量:可以是变量,也可以是常量
2)构造方法:有构造方法
3)成员方法:可以是抽象方法,也可以是非抽象方法
接口:
1)成员变量:只能是常量
2)构造方法:没有构造方法
3)成员方法:只能是抽象方法 -
关系区别
1)类与类:继承关系,只能单继承,可以多层继承
2)类与接口:实现关系,可以单实现,也可以多实现
3)接口与接口:继承关系,可以单继承,也可以多继承 -
设计理念的区别
1)抽象类 被继承体现的是:"is a"抽象类中定义的是继承体系的共性功能
2)接口 被实现体现的是:“like a” 接口中定义的是该体系的扩展功能 -
举例
1)猫,动物
2)猫,跳高运动员
网友评论