1. 程式人生 > >抽象類與介面之間的關係

抽象類與介面之間的關係

/*
老師和學生案例,加入抽菸的額外功能

分析:從具體到抽象
老師:姓名,年齡,吃飯,睡覺
學生:姓名,年齡,吃飯,睡覺

由於有共性功能,我們提取出一個父類,人類。

人類:
姓名,年齡
吃飯();
睡覺(){}

抽菸的額外功能不是人或者老師,或者學生一開始就應該具備的,所以,我們把它定義為介面

抽菸介面。


部分老師抽菸:實現抽菸介面
部分學生抽菸:實現抽菸介面

實現:從抽象到具體

使用:具體
*/
//定義抽菸介面
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();

//測試老師留給自己練習
}
}