Java的繼承和多態

1、繼承示例

1.1 

創建Pet(寵物)父類

    // 創建Pet(寵物)父類

public 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方法
        	
	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;
		
	}
	
	//set方法
	
	public void setHealth(int health) {
	
		this.health = health;
		
	}
	
	public String getLove() {
	
		return love;
		
	}
	
	public void setLove(String love) {
	
		this.love = love;
		
	}
	
	// 父類中的print(打印)方法
	
	public void print(){
		
		System.out.println(name+"\t"+age+"\t"+health+"\t"+love);
		
	}
	
	// 父類中的shout(叫聲)方法
	
	public void shout(){
		
		System.out.println("寵物的叫聲!");
		
	}
	
}		

創建Dog(寵物>狗)子類extends關鍵字

// 創建Dog(寵物>狗)子類繼承父類Pet
         
public class Dog extends Pet {
   
    // 狗類特有的strain(品種)屬性
     
    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);
         
        this.strain = strain;
         
    // System.out.println("子類有參構造方法"); 
     
    }
     
    // 子類get方法
     
    public String getStrain() {
     
        return strain;
         
    }
 
    // 子類set方法
     
    public void setStrain(String strain) {
     
        this.strain = strain;
         
    }
     
    // 父類print方法重寫
     
  public void print(){
     
      System.out.println(super.getName()+"\t"+super.getAge()+"\t"+super.getHealth()+"\t"+super.getLove()+"\t"+strain);
  }
     
    // 父類shout方法重寫
     
//    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();
		//
	}

}    	

結果驗證一:

旺財2100友愛泰迪

結果驗證二:去掉Dog類中super();中內容

null00null泰迪


2、多態示例一

“+”:可以表示加法運算符;可以表示拼接運算符。

2.1

//創建Pet(寵物)父類

public 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方法
             
    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;
         
    }
     
    //set方法
     
    public void setHealth(int health) {
     
        this.health = health;
         
    }
     
    public String getLove() {
     
        return love;
         
    }
     
    public void setLove(String love) {
     
        this.love = love;
         
    }
     
    // 父類中的print(打印)方法
     
    public void print(){
         
        System.out.println(name+"\t"+age+"\t"+health+"\t"+love);
         
    }
     
    // 父類中的shout(叫聲)方法
     
    public void shout(){
         
        System.out.println("寵物的叫聲!");
         
    }
     
}

創建Dog(寵物>狗)子類繼承父類Pet

// 創建Dog(寵物>狗)子類繼承父類Pet
         
public class Dog extends Pet {
   
    // 狗類特有的strain(品種)屬性
     
    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);
         
        this.strain = strain;
         
    // System.out.println("子類有參構造方法"); 
     
    }
     
    // 子類get方法
     
    public String getStrain() {
     
        return strain;
         
    }
 
    // 子類set方法
     
    public void setStrain(String strain) {
     
        this.strain = strain;
         
    }
     
    // 父類print方法重寫
//     
//  public void print(){
//     
//      System.out.println(super.getName()+"\t"+super.getAge()+"\t"+super.getHealth()+"\t"+super.getLove()+"\t"+strain);
//  }
     
    // 父類shout方法重寫
     
    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();
		
	}
				
}

結果驗證:

名叫旺財小狗汪汪的叫聲!


2.2 多態的示

創建Pet(寵物)父類

//創建Pet(寵物)父類

public 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方法
             
    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;
         
    }
     
    //set方法
     
    public void setHealth(int health) {
     
        this.health = health;
         
    }
     
    public String getLove() {
     
        return love;
         
    }
     
    public void setLove(String love) {
     
        this.love = love;
         
    }
     
    // 父類中的print(打印)方法
     
    public void print(){
         
        System.out.println(name+"\t"+age+"\t"+health+"\t"+love);
         
    }
     
    // 父類中的shout(叫聲)方法
     
    public void shout(){
         
        System.out.println("寵物的叫聲!");
         
    }
     
}

創建Dog(寵物>狗)子類繼承父類Pet

// 創建Dog(寵物>狗)子類繼承父類Pet
         
public class Dog extends Pet {
   
    // 狗類特有的strain(品種)屬性
     
    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);
         
        this.strain = strain;
         
    // System.out.println("子類有參構造方法"); 
     
    }
     
    // 子類get方法
     
    public String getStrain() {
     
        return strain;
         
    }
 
    // 子類set方法
     
    public void setStrain(String strain) {
     
        this.strain = strain;
         
    }
     
    // 父類print方法重寫
//     
//  public void print(){
//     
//      System.out.println(super.getName()+"\t"+super.getAge()+"\t"+super.getHealth()+"\t"+super.getLove()+"\t"+strain);
//  }
     
    // 父類shout方法重寫
     
    public void shout(){
         
        System.out.println("名叫"+this.getName()+"小狗汪汪的叫聲!");
         
    }
     
}

創建Penguin(寵物>企鵝)類

// 創建Penguin(寵物>企鵝)類

public class Penguin extends Pet{
	
	// 企鵝sex(性別)特有屬性
	
	public String sex;

	// 子類get方法
	
	public String getSex() {
	
		return sex;
		
	}

	// 子類set方法
	
	public void setSex(String sex) {
	
		this.sex = sex;
		
	}
	
	// 父類shout方法重寫
	
	public void shout(){
		
		System.out.println("名叫"+this.getName()+"企鵝喵喵的叫聲!");
		
	}
}

創建Petshop(提供購買的方法)類

//創建Petshop(提供購買的方法)類

import java.util.Scanner;

public class Petshop {

//	創建BuyPet方法
	
	public Pet BuyPet(){
		
//		定義pet變量的初始值爲null(空)
		
		Pet pet = null;
		
//		提示用戶的輸入數字
		
		System.out.println("請輸入您要購買的寵物:1.小狗 2.小企鵝");
		
//		獲取用戶的輸入存取到buypet變量中
		
		Scanner input = new Scanner(System.in);
		
		int buyPet = input.nextInt();
		
//		switch判斷用戶輸入數字
		
		switch(buyPet){
		
			case 1://當用戶輸入數字1,則寵物爲小狗
				
				pet = new Dog("旺財",2,100,"友愛","泰迪");
				
				break;
				
			case 2://當用戶輸入數字2,則寵物爲小企鵝
				
				pet = new Penguin();
				
			    break;
			    
			default:
				
				break;
		}
		
		return pet;
	}
	
}

創建PetDemo測試類

//創建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.小企鵝

1

名叫旺財小狗汪汪的叫聲!


結果驗證二:

請輸入您要購買的寵物:1.小狗 2.小企鵝

2

名叫null企鵝喵喵的叫聲!


3、instanceof關鍵字

此關鍵字訪問子類中特有的屬性

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.小企鵝

1

名叫旺財小狗汪汪的叫聲!

泰迪

結果驗證二:

請輸入您要購買的寵物:1.小狗 2.小企鵝

2

名叫null企鵝喵喵的叫聲!

null

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