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

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