關於介面的兩個案例
阿新 • • 發佈:2019-01-09
/* 貓狗案例,加入跳高的額外功能 分析:從具體到抽象 貓: 姓名,年齡 吃飯,睡覺 狗: 姓名,年齡 吃飯,睡覺 由於有共性功能,所以,我們抽取出一個父類: 動物: 姓名,年齡 吃飯(); 睡覺(){} 貓:繼承自動物 狗:繼承自動物 跳高的額外功能是一個新的擴充套件功能,所以我們要定義一個介面 介面: 跳高 部分貓:實現跳高 部分狗:實現跳高 實現; 從抽象到具體 使用: 使用具體類 */ //定義跳高介面 interface Jumpping { //跳高功能 public abstract void jump(); } //定義抽象類 abstract class Animal { //姓名 private String name; //年齡 private int age; public Animal() {} public Animal(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //吃飯(); public abstract void eat(); //睡覺(){} public void sleep() { System.out.println("睡覺覺了"); } } //具體貓類 class Cat extends Animal { public Cat(){} public Cat(String name,int age) { super(name,age); } public void eat() { System.out.println("貓吃魚"); } } //具體狗類 class Dog extends Animal { public Dog(){} public Dog(String name,int age) { super(name,age); } public void eat() { System.out.println("狗吃肉"); } } //有跳高功能的貓 class JumpCat extends Cat implements Jumpping { public JumpCat() {} public JumpCat(String name,int age) { super(name,age); } public void jump() { System.out.println("跳高貓"); } } //有跳高功能的狗 class JumpDog extends Dog implements Jumpping { public JumpDog() {} public JumpDog(String name,int age) { super(name,age); } public void jump() { System.out.println("跳高狗"); } } class InterfaceTest { public static void main(String[] args) { //定義跳高貓並測試 JumpCat jc = new JumpCat(); jc.setName("哆啦A夢"); jc.setAge(3); System.out.println(jc.getName()+"---"+jc.getAge()); jc.eat(); jc.sleep(); jc.jump(); System.out.println("-----------------"); JumpCat jc2 = new JumpCat("加菲貓",2); System.out.println(jc2.getName()+"---"+jc2.getAge()); jc2.eat(); jc2.sleep(); jc2.jump(); } }
/* 老師和學生案例,加入抽菸的額外功能 分析:從具體到抽象 老師:姓名,年齡,吃飯,睡覺 學生:姓名,年齡,吃飯,睡覺 由於有共性功能,我們提取出一個父類,人類。 人類: 姓名,年齡 吃飯(); 睡覺(){} 抽菸的額外功能不是人或者老師,或者學生一開始就應該具備的,所以,我們把它定義為介面 抽菸介面。 部分老師抽菸:實現抽菸介面 部分學生抽菸:實現抽菸介面 實現:從抽象到具體 使用:具體 */ //定義抽菸介面 interface Smoking { //抽菸的抽象方法 public abstract void smoke(); } //定義抽象人類 abstract class Person { //姓名 private String name; //年齡 private int age; public Person() {} public Person(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //吃飯(); public abstract void eat(); //睡覺(){} public void sleep() { System.out.println("睡覺覺了"); } } //具體老師類 class Teacher extends Person { public Teacher() {} public Teacher(String name,int age) { super(name,age); } public void eat() { System.out.println("吃大白菜"); } } //具體學生類 class Student extends Person { public Student() {} public Student(String name,int age) { super(name,age); } public void eat() { System.out.println("吃紅燒肉"); } } //抽菸的老師 class SmokingTeacher extends Teacher implements Smoking { public SmokingTeacher() {} public SmokingTeacher(String name,int age) { super(name,age); } public void smoke() { System.out.println("抽菸的老師"); } } //抽菸的學生 class SmokingStudent extends Student implements Smoking { public SmokingStudent() {} public SmokingStudent(String name,int age) { super(name,age); } public void smoke() { System.out.println("抽菸的學生"); } } class InterfaceTest2 { public static void main(String[] args) { //測試學生 SmokingStudent ss = new SmokingStudent(); ss.setName("林青霞"); ss.setAge(27); System.out.println(ss.getName()+"---"+ss.getAge()); ss.eat(); ss.sleep(); ss.smoke(); System.out.println("-------------------"); SmokingStudent ss2 = new SmokingStudent("劉意",30); System.out.println(ss2.getName()+"---"+ss2.getAge()); ss2.eat(); ss2.sleep(); ss2.smoke(); //測試老師留給自己練習 } }