Java抽象類和接口

1、// 定義抽象類

1.1 定義Pet抽象類(abstract關鍵字)

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 抽象類

抽象方法(必須在抽象類中)

必須使用abstract關鍵字

抽象類不能被實例化,它可以具有抽象方法或者普通方法


需求說明

實現某公司各種崗位的員工薪水計算,輸出不同崗位各一名員工的工資。要求使用抽象類實現

分析

定義員工抽象類,具有計算薪水的抽象方法

定義子類:經理類、銷售人員類、普通員工類,分別繼承員工抽象類,重寫計算薪水的方法;

定義測試類,包含輸出薪水的方法,參數爲員工對象;

	// 定義員工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


2、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();
	
	}
}

結果驗證:

電視機插入電源插座開始播放電視節目。



3、實現多個接口

練習

需求說明

在職研究生既要學習,還要工作,使用實現多個接口的方式定義研究生類;

分析

定義人類作爲抽象父類,包含人的基本屬性和行爲;

定義學習接口,擁有學習能力 ;

定義工作接口,擁有工作能力;

定義研究生類,繼承人類,同時實現學習接口和工作接口;


// 定義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();
	
    }
}

結果驗證:

張三研究生具有學習能力。

張三研究生具有工作能力。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章