1. 程式人生 > >Abstract抽象類的練習

Abstract抽象類的練習

抽象類使用練習

abstract class Animal{  //抽象父類
	Animal(){
		System.out.println("Animal的無參構造被呼叫");
	}
	Animal(int i){
		System.out.println("有有參構造器被呼叫");
	}
	public abstract void eat();  //子類實現此抽象方法時,修飾符的許可權必須大於抽象類public>protected>default>private
	abstract void bark();
	
	public void aaaa() {  //抽象類可以有自己的非抽象方法
		System.out.println("aaaaaa");
	}
}

class Dog extends Animal{
	public void eat() {
		System.out.println("啃骨頭");
	}
	protected void bark(){
		System.out.println("狗可以吠叫");
	}
}

class Cat extends Animal{  //Cat類繼承Animal抽象類,必須實現抽象類中的抽象方法,同時也可以有自己的方法
	public void eat() {
		System.out.println("吃魚");
	}
	public void bark() {
		System.out.println("喵喵叫");
	}
	public void ccc() {
		
	}
	
	public static  class Test{  //靜態類只能是內部類,在外部編譯會報錯
        Test(){
        	System.out.println("靜態內部類的無參構造被呼叫");
        }
		
	}
}


public class Abstranct_多型的表現形式之一抽象類{
	
	static int j = 0;
	int i = 0;
	
	public static void main(String args[]){
		Animal a = new Cat();  //父類的引用指向子類的物件
        Animal b = new Dog();
		show(a);  //多型的表現形式之一:抽象方法,同一個方法傳入不同的引數,表現不同的形式。另外兩個是重寫與介面
		show(b);
		
		Cat.Test t = new Cat.Test();  //靜態內部類可以這樣例項化
		
	}
	
	public static void show(Animal a) {
		j = 9;  //靜態方法只能引用靜態變數
//		i = 9;  //引用非靜態變數時編譯會報錯
		a.eat();
		a.bark();
	}
	
	
}

不積跬步無以至千里