11.1.4 接口的实现
【实例11.2】接口的用处就是让类通过实现它,来执行一定的功能。下面通过实例演示接口的实现功能,在看实例之前,先看看这个实例的流程,如图11.1所示。
注意 类实现接口时要使用implements关键字。
首先看看学校接口的设计。
01 ///声明一个学校接口,来告诉程序需要做些什么
02 ///其中包括了很多方法。但是都没有去实现,即都没有函数体
03 interface school
04 {
05 void setschoolname(String schoolname);
06 void setclassname(String schoolclassname);
07 void setname(String name);
08 void setcode(String code);
09 void setsexy(String sexy);
10 void setbirthday(String birthday);
11 void setfamilyaddress(String familyaddress);
12 String getschoolname();
13 String getclassname();
14 String getname();
15 String getcode();
16 String getsexy();
17 String getbirthday();
18 String getfamilyaddress();
19 }
图 11.1 有关接口的一个实例
下面再来设计学生类,其代码如下:
20 ///创建一个类,让它实现学校这个接口
21 ///通过设置器来设置各个参数
22 ///通过访问器来获得对象的参数
23 ///通过tostring方法来让对象以字符串形式输出
24 class student implements school
25 {
26 private String schoolname;
27 private String classname;
28 private String studentname;
29 private String studentcode;
30 private String studentsexy;
31 private String studentbirthday;
32 private String familyaddress;
33 public void setschoolname(String schoolname)
34 {
35 this.schoolname=schoolname;
36 }
37 public void setclassname(String classname)
38 {
39 this.classname=classname;
40 }
41 public void setname(String studentname)
42 {
43 this.studentname=studentname;
44 }
45 public void setcode(String studentcode)
46 {
47 this.studentcode=studentcode;
48 }
49 public void setsexy(String studentsexy)
50 {
51 this.studentsexy=studentsexy;
52 }
53 public void setbirthday(String studentbirthday)
54 {
55 this.studentbirthday=studentbirthday;
56 }
57 public void setfamilyaddress(String familyaddress)
58 {
59 this.familyaddress=familyaddress;
60 }
61 public String getschoolname()
62 {
63 return schoolname;
64 }
65 public String getclassname()
66 {
67 return classname;
68 }
69 public String getname()
70 {
71 return studentname;
72 }
73 public String getcode()
74 {
75 return studentcode;
76 }
77 public String getsexy()
78 {
79 return studentsexy;
80 }
81 public String getbirthday()
82 {
83 return studentbirthday;
84 }
85 public String getfamilyaddress()
86 {
87 return familyaddress;
88 }
89 public String tostring()
90 {
91 String infor="学校 名称:"+schoolname+""+"班级名称:"+classname+""+"学生姓
92名:"+studentname+""+"学号:"+studentcode+""+"性别:"+studentsexy+""+"出生年月:
93"+studentbirthday+""+"家庭地址:"+familyaddress;
94 return infor;
95 }
96 }
下面再来设计教师类,其代码如下所示。
97 ///让教师类实现学校这个接口
98 ///通过设置器来设置各个参数
99 ///通过访问器来获得各个参数
100 ///通过tostring方法来让对象以字符串形式输出
101 class teacher implements school
102 {
103 private String schoolname;
104 private String classname;
105 private String teachername;
106 private String teachercode;
107 private String teachersexy;
108 private String teacherbirthday;
109 private String familyaddress;
110 public void setschoolname(String schoolname)
111 {
112 this.schoolname=schoolname;
113 }
114 public void setclassname(String classname)
115 {
116 this.classname=classname;
117 }
118 public void setname(String teachername)
119 {
120 this.teachername=teachername;
121 }
122 public void setcode(String teachercode)
123 {
124 this.teachercode=teachercode;
125 }
126 public void setsexy(String teachersexy)
127 {
128 this.teachersexy=teachersexy;
129 }
130 public void setbirthday(String teacherbirthday)
131 {
132 this.teacherbirthday=teacherbirthday;
133 }
134 public void setfamilyaddress(String familyaddress)
135 {
136 this.familyaddress=familyaddress;
137 }
138 public String getschoolname()
139 {
140 return schoolname;
141 }
142 public String getclassname()
143 {
144 return classname;
145 }
146 public String getname()
147 {
148 return teachername;
149 }
150 public String getcode()
151 {
152 return teachercode;
153 }
154 public String getsexy()
155 {
156 return teachersexy;
157 }
158 public String getbirthday()
159 {
160 return teacherbirthday;
161 }
162 public String getfamilyaddress()
163 {
164 return familyaddress;
165 }
166 public String tostring()
167 {
168 String infor="学校名称:"+schoolname+""+"班级名称:"+classname+""+"教师姓名:
169"+teachername+""+"教师工号:"+teachercode+""+"性别:"+teachersexy+""+"出生年月:
170"+teacherbirthday+""+"家庭地址:"+familyaddress;
171 return infor;
172 }
173 }
主运行程序的代码如下所示。
174 ///主运行函数
175 ///从学生类中创建出几个对象
176 ///从教师类中创建出几个对象
177 ///通过设置器设置各个参数,在对象内部隐
178 ///藏着访问器,来访问这些参数
179 ///以字符串形式输出这些对象的字符串
180 public class schooltest
181 {
182 public static void main(String[]args)
183 {
184 student st1=new student();
185 student st2=new student();
186 teacher te1=new teacher();
187 teacher te2=new teacher();
188 st1.setschoolname("重庆大学");
189 st1.setclassname("计算机二班");
190 st1.setname("王浩");
191 st1.setcode("951034");
192 st1.setsexy("男");
193 st1.setbirthday("1975-07-21");
194 st1.setfamilyaddress("上海市浦东新区");
195 st2.setschoolname("重庆大学");
196 st2.setclassname("计算机三班");
197 st2.setname("赵丽");
198 st2.setcode("951068");
199 st2.setsexy("女");
200 st2.setbirthday("1975-10-09");
201 st2.setfamilyaddress("北京海淀区");
202 te1.setschoolname("四川大学");
203 te1.setclassname("计算机二班");
204 te1.setname("孙敏");
205 te1.setcode("00123");
206 te1.setsexy("女");
207 te1.setbirthday("1968-04-20");
208 te1.setfamilyaddress("重庆市沙坪坝区");
209 te2.setschoolname("四川大学");
210 te2.setclassname("机械系三班");
211 te2.setname("赵为民");
212 te2.setcode("11233");
213 te2.setsexy("男");
214 te2.setbirthday("1961-02-13");
215 te2.setfamilyaddress("成都市区");
216 System.out.println(st1.tostring());
217 System.out.println(st2.tostring());
218 System.out.println(te1.tostring());
219 System.out.println(te2.tostring());
220 }
221 }
【代码说明】本例代码比较长,但都非常简单。第3~19行定义接口school,并规范了14种方法。第24~96行定义了类student,其实现了接口school,也就是在类中实现了接口定义的14种方法,然后还定义了自己的tostring()方法,输出学生信息。第101~173行定义了类teacher,也实现了接口school,同样实现了接口中的14种方法,然后也定义了自己的tostring()方法,输出教师信息。第180~221行是主运行程序,其中定义了4个对象,然后调用tostring()方法输出信息。
【运行效果】
学校 名称:重庆大学 班级名称:计算机二班学生 姓名:王浩 学号:951034 性别:男出 生年月:1975-07-21 家庭地址:上海市浦东新区
学校 名称:重庆大学 班级名称:计算机三班学生 姓名:赵丽 学号:951068 性别:女出 生年月:1975-10-09 家庭地址:北京海淀区
学校 名称:四川大学 班级名称:计算机二班 教师姓名:孙敏 教师工号:00123 性别:女出 生年月:1968-04-20 家庭地址:重庆市沙坪坝区
学校 名称:四川大学 班级名称:机械系三班 教师姓名:赵为民 教师工号:11233 性别:男出 生年月:1961-02-13 家庭地址:成都市区
举这个例子的目的就是了解接口的用处。在这个程序段中,将接口作为一种规范,当要提取一个学生类时,就用学生类来实现学校这个接口。当要提取一个教师类时,教师类也实现学校这个接口。
接口的用处在于让整个程序段中相同类型的类有一个统一的规范,这样看到接口的定义,就知道要实现它的类的功能。在类实现接口时,需要注意以下几点:
❑声明类需要实现指定的接口。
❑提供接口中所有方法的定义。