一、// 定義抽象類java
1.1 定義Pet抽象類(abstract關鍵字)
ide
public abstract class Pet { //建立父類的私有屬性 private String name; private int age; private int health; private String love; public Pet(){ //System.out.println("父類無參構造方法"); } public Pet(String name,int age,int health,String love){ this.name = name; this.age = age; this.health = health; this.love = love; //System.out.println("父類有參構造方法") } //父類的get方法、set方法 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 int getHealth() { return health; } public void setHealth(int health) { this.health = health; } public String getLove() { return love; } public void setLove(String love) { this.love = love; } //定義父類的普通打印方法 public void print(){ System.out .println(name+"\t"+age+"\t"+health+"\t"+love); } //普通方法 /*public void shout(){ System.out.println("寵物的叫聲!"); }*/ //抽象方法:訪問修飾符+abstract關鍵字+返回值+方法名 //抽象方法必須在抽象類中,抽象方法沒有方法體(也就是說沒有大括號) public abstract void shout(); }
//定義Dog子類extends繼承Pet父類 public class Dog extends Pet { // 子類私有屬性 public String strain; // public Dog() { // // //System.out.println("子類無參構造方法"); // } public Dog(String name, int age, int health, String love,String strain) { // Super引用父類屬性 super(name, age, health, love); //System.out.println("子類有參構造方法"); } // 子類get方法 // public String getStrain() { // return strain; // } // 子類set方法 // public void setStrain(String strain) { // this.strain = strain; // } //子類方法重寫 // public void print(){ // //Super引用父類方法 // System.out.println(super.getName()+"\t"+super.getAge()+"\t"+super.getHealth()+"\t"+super.getLove()+"\t"+strain); // } public void shout(){ System.out.println("名叫"+this.getName()+"的小狗汪汪的叫!"); } }
//定義PetDemo測試類 public class PetDemo { public static void main(String[] args) { // Dog dog = new Dog("旺財",2,100,"友愛","泰迪"); //dog.setName("旺財"); //dog.strain="泰迪"; //dog.setAge(2); //dog.setHealth(100); //dog.setLove("友愛"); // System.out.println(dog.getName()+"\t"+dog.strain+"\t"+dog.getAge()+"\t"+dog.getHealth()+"\t"+dog.getLove()); // dog.print(); // Penguin penguin = new Penguin(); // Pet pet1 = new Dog(); //// Pet pet2 = new Penguin(); // pet1.shout(); //// pet2.shout(); // Petshop petshop = new Petshop(); // Pet pet3 = petshop.BuyPet(); // pet3.shout(); // if(pet3 instanceof Dog){ // Dog dog1 = (Dog)pet3; // System.out.println(dog1.getStrain()); // }else{ // Penguin penguin1 = (Penguin)pet3; // System.out.println(penguin1.getSex()); // } Pet dog = new Dog("旺財",12,100,"友愛","泰迪"); dog.shout(); }
結果驗證:學習
名叫旺財的小狗汪汪的叫!測試
1.2 抽象類ui
抽象方法(必須在抽象類中)this
必須使用abstract關鍵字spa
抽象類不能被實例化,它能夠具備抽象方法或者普通方法對象
需求說明繼承
實現某公司各類崗位的員工薪水計算,輸出不一樣崗位各一名員工的工資。要求使用抽象類實現接口
分析
定義員工抽象類,具備計算薪水的抽象方法
定義子類:經理類、銷售人員類、普通員工類,分別繼承員工抽象類,重寫計算薪水的方法;
定義測試類,包含輸出薪水的方法,參數爲員工對象;
// 定義員工Staff抽象類 public abstract class Staff { // 定義員工的salary薪水變量(私有屬性) private double salary ; // 員工類的無參構造方法 public Staff() { } // 員工類的有參構造方法 public Staff(double salary) { this.salary = salary; } // 薪水的getSalary方法 public double getSalary() { return salary; } // 薪水的setSalary方法 public void setSalary(double salary) { this.salary = salary; } // 計算薪水的抽象方法 public abstract void calcSalary(); }
// 銷售員工market的類繼承Staff員工類 public class market extends Staff { // 子類無參構造方法 public market() { super(); } // 子類的有參構造方法 public market(double salary) { super(salary); } // 重寫父類的抽象方法,calcSalary名稱一致 public void calcSalary(){ System.out.println("銷售的薪水爲:"+(this.getSalary()+50000*0.06)); } }
// 定義銷售員工的測試類進行驗證 public class marketDemo { public static void main(String[] args) { Staff mar = new market(500); mar.calcSalary(); } }
結果驗證:
銷售的薪水爲:3500.0
二、Java接口
示例 // 定義電源插座的接口,具備供電的能力;
package study; // 定義Socket接口 public interface Socket { // 定義接口的抽象方法 public void getPower(); }
//定義類:電視類實現電源插座接口;
package study; // 定義電視機TV類引用Socket接口 public class TV implements Socket{ // 重寫引用接口的方法 getPower要一致 public void getPower(){ System.out.println("電視機插入電源插座開始播放電視節目。"); } }
//定義測試類,包含電器開始工做的方法,參數爲電器對象;
package study; // 定義測試類 public class SocketDemo { public static void main(String[] args) { // 建立對象 Socket tv = new TV(); tv.getPower(); } }
結果驗證:
電視機插入電源插座開始播放電視節目。
三、實現多個接口
練習
需求說明
在職研究生既要學習,還要工做,使用實現多個接口的方式定義研究生類;
分析
定義人類做爲抽象父類,包含人的基本屬性和行爲;
定義學習接口,擁有學習能力 ;
定義工做接口,擁有工做能力;
定義研究生類,繼承人類,同時實現學習接口和工做接口;
// 定義Person_student抽象類(父類) public abstract class Person_student { // name屬性 public String name; // 構造方法 public Person_student(String name) { super(); this.name = name; } // get方法 public String getName() { return name; } // set方法 public void setName(String name) { this.name = name; } }
// 定義Work工做接口 public interface Work { public void getWork(); }
// 定義Study學習接口 public interface Study { public void getStudy(); }
// 定義Graduate_student研究生類繼承Person_student父類,實現Work,Study接口 public class Graduate_student extends Person_student implements Work,Study { // 繼承父類屬性name public Graduate_student(String name) { super(name); } // 實現Work接口,重寫Work接口中的getWork方法 public void getWork(){ System.out.println(this.getName()+"研究生具備工做能力。"); } // 實現Study接口,重寫Study接口中的getStudy方法 public void getStudy(){ System.out.println(this.getName()+"研究生具備學習能力。"); } }
// 定義測試類 public class GraduateDemo { public static void main(String[] args) { // 新建Graduate_student對象stu Graduate_student stu = new Graduate_student("張三"); stu.getStudy(); stu.getWork(); } }
結果驗證:
張三研究生具備學習能力。
張三研究生具備工做能力。