11.1.7 接口的继承

接口从某些方面具有类的一些特性,如有方法、有属性,那么是否像类一样可以继承?回答是肯定的。接口的继承和类的继承一样,也是用关键字“extends”来实现。

【实例11.4】下面先看一个有关接口继承的实例。实例的流程如图11.3所示。


11.1.7 接口的继承 - 图1

图 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 家庭地址:成都市区