• <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • Java面向對象
    Java異常
    Java數組
    Java常用類
    Java集合
    Java IO流
    Java線程
    Java反射
    Socket編程
    Java注解開發
    Java GoF設計模式
    HashMap
    Java內存模型
    Java線性表

    Java抽象類

     

     

    把所有的三角形抽象類三角形類, 把所有的圓形抽象為圓形類,把所有的矩形抽象為矩形類, 把所有的三角形/圓形/矩形等所有平面圖形抽象為平面圖形類。

     

    在平面圖形類, 可以進行對平面圖形求面積/求周長等操作, 但是不同的圖形有不同的求法, 在平面圖形類中, 求面積/求周長的操作沒法具體實現. 就像所有的動物都會動, 不同的動物動的方式不同,動物類有這個操作,也沒法具體實現。

     

    當一個類的某個操作沒法具體實現時,這個操作可以定義為抽象方法。

     

    抽象方法使用abstract修飾的方法,只有方法的聲明部分,沒有方法體。

     

    package com.wkcto.chapter01.abstracttest.demo01;
    /**
     * 定義平面圖形 類
     * 		該類有對平面圖形求面積,求周長的操作
     * 
     * 1) 當一個類的某個操作沒法具體實現時, 這個操作可以定義為抽象方法
     * 2) 使用abstract修飾的方法為抽象方法, 只有方法的聲明,沒有方法體
     * 3) 含有抽象方法的類必須定義為抽象類
     * @author 蛙課網
     *
     */
    public abstract class Graphics2d {
    	//定義抽象方法,求面積
    	public abstract double getArea();
    	//定義抽象方法,求周長
    	public abstract double getPerimeter();
    	
    }

     

    package com.wkcto.chapter01.abstracttest.demo01;
    /**
     * 定義矩形類
     * 
     * 	1) 子類繼承了抽象類, 需要在子類中重寫抽象類的抽象方法
     * @author 蛙課網
     *
     */
    public class Rectangle extends Graphics2d {
    	int width;
    	int height;
    	
    	public Rectangle(int width, int height) {
    		super();
    		this.width = width;
    		this.height = height;
    	}
    
    	@Override
    	public double getArea() {
    		return width*height;
    	}
    
    	@Override
    	public double getPerimeter() {
    		return 2*(width+height);
    	}
    
    }

     

    package com.wkcto.chapter01.abstracttest.demo01;
    /**
     * 測試類,
     * 	定義一個方法,可以顯示任意平面圖形的面積與周長
     * @author 蛙課網
     *
     */
    public class Test {
    
    	public static void main(String[] args) {
    		//創建矩形 對象
    		Rectangle rect = new Rectangle(10, 5);
    		//方法的形參graphics2d是一個父類引用,在調用方法時, 可以傳遞子類對象
    		showInfo(rect);
    		
    		//創建圓形對象
    		Circle c1 = new Circle(10);
    		showInfo(c1);
    	}
    
    	//	定義一個方法,可以顯示任意平面圖形的面積與周長
    	public static void showInfo( Graphics2d graphics2d) {
    		System.out.println("平面圖形的信息------------------");
    		System.out.println("面積:" + graphics2d.getArea());
    		System.out.println( "周長:" + graphics2d.getPerimeter());
    	}
    }

     

    package com.wkcto.chapter01.abstracttest.demo01;
    /**
     * 定義三角形類
     * 		如果子類繼承了抽象類, 沒有重寫所有的抽象方法,那么子類也需要定義為抽象類
     * @author 蛙課網
     *
     */
    public abstract class Triangle extends Graphics2d {
    	int a;
    	int b;
    	int c;
    	
    	@Override
    	public double getPerimeter() {
    		return a+b+c;
    	}
    }

     

    package com.wkcto.chapter01.abstracttest.demo01;
    /**
     * 測試抽象類的特點:
     * 	1) 只要使用abtract修飾的類就是抽象類
     * 	2) 含有抽象方法的類必須定義 為抽象類,但是,抽象類中不一定含有抽象方法
     * 		有時,對現有的類進一步抽象形成更高層級的類(更抽象的類),如食物類,動物類, 它們是沒法實例化,這種情況下,可以定義為抽象類
     * 	3) 抽象類是一種引用數據類型, 可以定義變量, 但是抽象類不能實例化對象,
     * 		抽象類定義引用可以賦值子類對象
     * 	4) 抽象類肯定含有構造方法, 子類創建對象時調用子類構造方法,子類構造方法體執行前會先執行父類的構造方法
     * 	5) abstract與final不能同時使用
     * @author 蛙課網
     *
     */
    public class Test02 {
    	public static void main(String[] args) {
    		//使用抽象類定義一個變量
    		Graphics2d graphics2d;
    //		graphics2d = new Graphics2d();;//Cannot instantiate the type Graphics2d
    		
    		Rectangle rectangle = new Rectangle(10, 5);
    		
    		//抽象類引用可以賦值子類對象
    		graphics2d = rectangle;
    		graphics2d = new Rectangle(5, 2);
    		
    		
    	}
    }

     

     

    練習: 主人喂養寵物,寵物就賣萌

     

    package com.wkcto.chapter01.abstracttest.demo02;
    /**
     * 寵物類
     * 		賣萌
     * @author 蛙課網
     *
     */
    public abstract class Pet {
    	//賣萌
    	public abstract void sellMeng() ;
    }

     

    package com.wkcto.chapter01.abstracttest.demo02;
    /**
     * 小狗是寵物
     * @author 蛙課網
     *
     */
    public class Dog extends Pet {
    
    	@Override
    	public void sellMeng() {
    		System.out.println("汪汪汪~~~~");
    	}
    
    }

     

    package com.wkcto.chapter01.abstracttest.demo02;
    /**
     * 主人類
     * @author 蛙課網
     *
     */
    public class Master {
    	//喂寵物
    	public void feed( Pet  pet) {
    		//寵物賣萌
    		pet.sellMeng();
    	}
    }

     

    package com.wkcto.chapter01.abstracttest.demo02;
    /**
     * 測試主人喂寵物,寵物就賣萌
     * @author 蛙課網
     *
     */
    public class Test {
    
    	public static void main(String[] args) {
    		Master xiaoxi  = new Master();
    		
    		Dog dog = new Dog();
    		xiaoxi.feed(dog);
    		
    		Cat cat = new Cat();
    		xiaoxi.feed(cat);
    	}
    
    }

     

     

    練習:

     

    憤怒的小鳥, 紅火(紅顏色的鳥)可以正常飛行 , 藍冰(藍顏色的鳥)可以一個變三個, 黃風(黃顏色的鳥)可以加速飛行,  定義一個彈弓類,有一個彈射的方法 ,可以把鳥給射出去, 鳥在飛。

     

     

    全部教程
  • <nav id="wkkge"><strong id="wkkge"></strong></nav>
  • <menu id="wkkge"></menu>
  • 面对面棋牌游戏