1. 程式人生 > >上機練習題——介面(課堂練習2)

上機練習題——介面(課堂練習2)

課堂練習2

大學裡的學生(Student)需要學費,而研究生(Graduate)作為學生比較特殊,除了需要交學費外,還可以獲取一部分科研津貼,由學校University)統一發放。此外,學校還需要發放教師Teacher)的工資

編寫程式碼模擬上述場景:

1) 設計抽象Student:

屬性包括姓名(name、學費fee);

方法包括

構造方法StudentString name)

- 抽象方法void setFeeint fee)

- 抽象方法int getFee()

2) 定義一個介面Salary:包含一個方法int getSalary();

3) 定義一個

研究生類Graduate,繼承Student類且實現Salary介面:

l 新增屬性:收入salary

l 方法包括:

- 構造方法GraduateString name)

- 重寫void setFeeint fee)

- 重寫int getFee()

- 重寫int getSalary(),研究生獲得工資1500

- 新增方法boolean isLoan(),判斷是否需要貸款(收入小於學費則需貸款)

4) 定義一個教師Teacher):

l 屬性包括:姓名(name)、收入salary

l 方法包括:

- 構造方法TeacherString name)

重寫int getSalary()

教師獲得工資3000

5) 定義一個大學類(University通過void payOffSalary s)方法給研究生和教師發放並列印工資。

1.Student.java(抽象類)

public abstract class Student {
	 public String name;  
	 public int fee;   
	 public Student(String name) {     //父類構造方法,系統預設為無參,如果寫了有參的則沒有無參的,可以寫多個  
	        super();  
	        this.name = name;  
	    }  
	      
	 public abstract void setFee(int fee);  
	 public abstract int getFee();  

}

2.Salary.java(介面)

public interface Salary {
	public abstract int getSalary();  

}


3.Graduate.java

public class Graduate extends Student implements Salary{
	public int salary;  
    
    public Graduate(String name) {  
        super(name);      //只要發生繼承,子類構造方法就會呼叫父類構造方法  
    }  
  
    //重寫實現的父介面的方法  
    @Override  
    public int getSalary() {  
        return 1500;  
    }  
  
    //重寫繼承的父類方法  
    @Override  
    public void setFee(int fee) {  
          
    }  
  
    //重寫繼承的父類方法  
    @Override  
    public int getFee() {  
        return 0;  
    }  
      
    public boolean isLoan(){  
        if(getFee()<getSalary())    //收入大於學費,不需要貸款  
            return false;     
        else                        //需要貸款  
            return true;            
    }  

}

4.Teacher.java

public class Teacher implements Salary{
	public String name;  
    public int salary;  
      
    public Teacher(String name) {  
        super();  
        this.name = name;  
    }  
      
    @Override  
    public int getSalary() {  
        return 3000;  
    } 

}

5.University.java

public class University {
	public void payOff(Salary s){  
        System.out.println("工資列印:"+s.getSalary());        
    } 

}

6.Test.java

public class Test {
	
	public static void main(String[] args) {  
        
        Graduate g=new Graduate("小亮");       
        g.setFee(1000);                       
          
        University u=new University();         
        u.payOff(g);                         
        System.out.println("是否需要貸款"+g.isLoan());  
          
        Teacher t=new Teacher("大王");  
        u.payOff(t);             
    }  

}

7.執行截圖