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 }