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