1. 程式人生 > >面向物件_抽象類練習貓狗案例

面向物件_抽象類練習貓狗案例

/*
	貓狗案例:
		具體事物:貓、狗
		共性:姓名、年齡、吃飯
	
	分析:從具體到抽象
		貓:
			成員變數:姓名、年齡
			構造方法:無參、帶參
			成員方法:吃飯(貓吃魚)

		狗:
			成員變數:姓名、年齡
			構造方法:無參、帶參
			成員方法:吃飯(狗吃肉)
			
		因為有共性的內容,所以提取了一個父類。動物。
		但是又由於吃飯的內容不一樣,所以吃飯的方法是抽象的,
		而方法是抽象的,類就必須定義為抽象類。
		
		抽象動物類:
			成員變數:姓名、年齡
			構造方法:無參、帶參
			成員方法:getXxx()/setXxx(),吃飯();//抽象方法
		
	實現:從抽象到具體
		動物類:
			成員變數:姓名、年齡
			構造方法:無參、帶參
			成員方法:getXxx()/setXxx(),吃飯();//抽象方法
		
		貓類:	
			繼承自動物類
			重寫吃飯方法;
			
		狗類:
			繼承自動物類
			重寫吃飯方法;
*/
//定義抽象動物類
abstract class Animal{
	//姓名
	private String name;
	//年齡
	private int age;
	
	//定義無參
	public Animal(){}
	
	//定義帶參
	public Animal(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	
	//定義getXxx(),setXxx()
	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 abstract void eat();
}

//定義具體狗類
class Dog extends Animal{
	//定義無參
	public Dog(){}
	
	//定義帶參
	public Dog(String name,int age){
		super(name,age);
	}
	
	//重寫吃飯方法(狗吃肉)
	public void eat(){
		System.out.println("狗吃肉");
	}
}

//定義具體的貓類
class Cat extends Animal{
	//無參
	public Cat(){}
	
	//帶參
	public Cat(String name,int age){
		super(name,age);
	}
	
	//重寫吃飯方法(貓吃魚)
	public void eat(){
		System.out.println("貓吃魚");
	}
}

class AbstractTest{
	public static void main(String[] args){
		//建立具體狗類物件
		//方式1
		Dog d = new Dog();
		d.setName("小金");
		d.setAge(2);
		System.out.println(d.getName()+"---"+d.getAge());
		d.eat();
		System.out.println("-------------------------");
		//方式2
		Dog d2 = new Dog("小哈",3);
		System.out.println(d2.getName()+"---"+d2.getAge());
		d2.eat();
		System.out.println("-------------------------");
		
		//建立多型狗類物件(如果,該程式要擴充套件就使用多型)
		//方式1
		Animal a = new Dog();
		a.setName("小金");
		a.setAge(2);
		System.out.println(a.getName()+"---"+a.getAge());
		a.eat();
		System.out.println("-------------------------");
		//方式2
		Animal a2 = new Dog("小哈",3);
		System.out.println(a2.getName()+"---"+a2.getAge());
		a2.eat();
		System.out.println("-------------------------\n\n\n");
	
		//建立具體貓類物件
		//方式1
		Cat c = new Cat();
		c.setName("喵喵");
		c.setAge(2);
		System.out.println(c.getName()+"---"+c.getAge());
		c.eat();
		System.out.println("-------------------------");
		//方式2
		Cat c2 = new Cat("小黃",3);
		System.out.println(c2.getName()+"---"+c2.getAge());
		c2.eat();
		System.out.println("-------------------------");
		
		//建立多型貓類物件(如果,該程式要擴充套件就使用多型)
		//方式1
		Animal a3 = new Cat();
		a3.setName("喵喵");
		a3.setAge(2);
		System.out.println(a3.getName()+"---"+a3.getAge());
		a3.eat();
		System.out.println("-------------------------");
		//方式2
		Animal a4 = new Cat("小黃",3);
		System.out.println(a4.getName()+"---"+a4.getAge());
		a4.eat();
		
	}
}