1 /*
2 老师和学生案例,加入抽烟的额外功能
3 分析:
4 老师和学生都具有共同的变量:名字,年龄
5 共同的方法:吃饭,睡觉
6 老师有额外的功能:抽烟(设定个接口),部分抽烟
7
8 有共同的变量和方法,设一个父类:person类 抽象类
9 person类:
10 名字,年龄
11 吃饭(); 抽象方法,可重写
12 睡觉(){};成员方法
13 子类:
14 teacher类和teacher类可继承父类。
15 但,部分老师和学生抽烟,则与抽烟接口进行扩展
16 */
17
18 //设定抽烟接口
19 //接口的变量是:静态常量最终量;接口没有构造方法,接口的成员方法是:抽象方法
20 interface Smoking{
21 // 静态 常量 最终量:public static final int a = 2; 有变量就这样写,这里不需要常量
22 public abstract void smoking();//抽象方法没有方法体
23 }
24
25 //设定父类:抽象类
26 abstract class perSon4{
27
28 //成员变量
29 private String name;
30 private int age;
31
32 //构造方法
33 public perSon4(){}
34 public perSon4(String name, int age){
35 this.name = name;
36 this.age = age;
37 }
38 //getXxx、setXxx。
39 public String getName(){
40 return name;
41 }
42 public void setName(String name){
43 this.name = name;
44 }
45 public int getAge(){
46 return age;
47 }
48 public void setAge(int age){
49 this.age = age;
50 }
51
52 //抽象方法 吃饭
53 public abstract void eat();
54 //成员方法
55 public void sleep(){
56 System.out.println("Zzz...");
57 }
58 }
59
60 //子类 老师类 继承父类
61 class teacher5 extends perSon4{
62 //无参构造方法
63 public teacher5(){}
64 //有参构造方法
65 public teacher5(String name,int age){
66 super(name,age);
67 }
68 public void eat() {
69 System.out.println("下班回去睡觉");
70 }
71 }
72
73 //子类 学生类 继承父类
74 class student5 extends perSon4{
75 //构造方法
76 public student5(){}
77 public student5(String name,int age){
78 super(name,age);
79 }
80 public void eat(){
81 System.out.println("下课回家睡觉");
82 }
83 }
84
85 //部分老师抽烟,扩展抽烟接口
86
87 class SmokTeacher5 extends teacher5 implements Smoking{
88 //继承了老师类,则把老师类的所有变量方法弄出来:
89 public SmokTeacher5(){}
90 public SmokTeacher5(String name,int age){
91 super(name,age);
92 }
93 public void smoking() {
94 System.out.println("抽烟的老师");
95 }
96 }
97
98 //部分学生抽烟
99
100 class SmokStudent5 extends student5 implements Smoking{
101 //继承了学生类,则把学生类的所有变量方法写出来:
102 public SmokStudent5(){}
103 public SmokStudent5(String name,int age){
104 super(name,age);
105 }
106 public void smoking() {
107 System.out.println("抽烟的学生");
108 }
109 }
110
111 //测试类
112
113 class InterfaceTest1 {
114 public static void main(String[] args){
115
116 //测试学生类 直接调用继承了类和扩张了方法的类
117 SmokStudent5 s = new SmokStudent5("张三",20);
118 s.smoking();
119 s.eat();
120 s.sleep();
121
122 System.out.println("---------");
123
124 //测试老师类
125 SmokTeacher5 t = new SmokTeacher5("李四",33);
126 t.smoking();
127 t.eat();
128 t.sleep();
129 }
130 }