这一章来记录接口。
接口 (interface):java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征却没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。
接口本质上是一个特殊的抽象类,不能被实例化。
接口是完全抽象的。
接口(interface):声明接口
interface 接口名{
属性定义语句;
方法声明语句;
}
属性定义语句可以进行省略写比如:
int xxx;double xxx;(自动修饰为 public static final int xxx; / double xxx;)
方法声明语句也可以进行省略写比如:
void xxx;double xxx;(自动修饰为 public abstract void xxx; / double xxx;)
接口(interface):接口的实例化
接口不能直接实例化,需加以实现后,才能实例化。
public interface Display{
void show();
}
public class DisplayImpl implements Display{
public void show( ){
System.out.println("正在显示。。。。。");
}
}
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ 声明某某某接口的实现类通常在名字后加Impl。
public class Test{
public static void main(String[] args){
Display display = new DisplayImpl( );
display.show( );
}
}
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ 使用 :接口类型 变量名 = new 接口实现类();
接口(interface):接口的继承
一个接口可以继承于另外的一个或多个接口并自动获得继承接口中的所有的属性和方法的定义。
↑ 1.如果包含多个父类接口,那么接口名之间用逗号分隔( , );
↑ 2.子接口自动获得每个父类的接口类型及所有的父接口的属性和方法;
↑ 3.子接口可以自行定义任何的属性和方法,不受父类影响。
接口(interface):接口的使用,何时使用接口呢?
实际应用中: 1.在设计阶段使用接口来表达设计意图。
2.在实现类中可能出现相同的实现部分。(SomFunctionA、B、C)
来看一个简单的例子
需求:一个学校准备采购一台打印机打印学生和老师的信息
要求:1.打印机的类型可能不定,后期可能会换成彩色打印机
2.对学校来说可以随意更改打印机打印老师的学生的信息
根据需求及要求得出:1.首先需要两个接口:(1)打印机 (2) 打印的信息
2.再设想(1)打印机 需要黑白和彩色打印机实现
(2)打印的信息 需要打印学生和老师的信息
(3)对学校来说 = 学校要使用打印机(方法)
3.设想完成后,开始我们的编程。
一、新建一个打印机的接口。
public interface Printer {
//不同类型的打印机输出不同的内容
String print(String str);
}
二、根据设想再 创建一个显示信息的接口。
public interface Info {
//显示详细信息的方法
String detail();
}
三、现在我们需要一个黑白、一个彩色的实例来实现打印机
public class BlackTyper implements Printer {//创建一个黑白类来继承打印机的接口
public String print(String str) { //实现打印机的Print方法(输入一个字符串)
return "黑白打印机打印"+str; //返回一组字符串内容为(黑白打印机+输入的内容)
}
}
public class ColourTyper implements Printer {//创建一个彩色类来继承打印机的接口
public String print(String str) {//实现打印机的Print方法(输入一个字符串)
return "彩色打印机打印"+str;//返回一组字符串内容为(彩色打印机+输入的内容)
}
}
四、现在我们来将显示的信息实例化~
public class Student implements Info{// 定义一个显示学生类来继承显示信息的接口
private String name; //定义一个私有化的成员变量(姓名)
public String getName() {//getter方法 用于私有化变量的获取
return name;
}
public void setName(String name) {//setter方法 用于私有化变量的设置
this.name = name;
}
public String detail() {//重写显示信息接口的方法
return "学生信息,姓名:" + name; //返回一个(比如 :学生信息,姓名:tom)的字符串
}
}
五、综上所述,同理我们现在需要一个老师的类,来显示老师的信息
public class Teacher implements Info{//定义一个老师的类,来重写接口的方法(其余与学生类一致)
private String name;
public Teacher(String name) {
this.name = name;
}
public String detail() {
return "教师信息,姓名:" + name;
}
}
六、由题目上所述学校可以随意变换打印机的选择,所以我们这里要建一个学校的类,来安置我们的打印机
public class School {
//定义打印机 把打印机安置在学校里/ 学校买了个打印机
private Printer iTyper;
public Printer getiTyper() { //getter方法,用来获取iTyper的内容,也就是打印机的内容
return iTyper;
}
public void setiTyper(Printer iTyper) {//setter方法,用来设置iTyper,也就是把内容交给打印机
this.iTyper = iTyper;
}
//最终定义一个打印机的打印方法
public void type(Info info) { // 定义一个无返回值的方法,放入一个显示信息接口的对象
System.out.println(iTyper.print(info.detail()));
//输出一个打印机打印方法+显示信息显示方法的字符串
//比如 (xxx打印机 + xxx的信息,姓名: xx)
}
}
七、现在我们已经完成了所有类的创建,接下来就需要一个测试类来对其进行运行测试了。
public class Test {//创建一个测试类
public static void main(String[] args) {
//首先 创建学校对象
School school = new School();
//我们给学校购买一台新的 黑色打印机
Printer ityper = new BlackTyper();
//随后我们需要给学校安装打印机
school.setiTyper(iyter);
//后我们定义 一个 新的 老师 叫做Tom
Teacher teacher = new Teacher("Tom");
//最后利用学校的打印机打印该名老师的信息
school.type(teacher);
}
}
八、 任务完成,这里我们就得到了一个“黑白打印机打印教师信息,姓名:Tom”
这是一个简单的接口案例,其为了满足设计思想中“开闭原则”所有才写的这么复杂,这样的话,要打印一个厨师或者是医务室护士等等,在或者是用彩虹打印机,闪光打印机打印等等,后期就能变的更加的简单方便,不用更改源码了。
PS:以上是对接口该章节做出的笔记,如哪里不对希望大牛们多多指出,让我在初学的路上不要走得太坎坷。
-迷茫的初学者-