Java面向對象抽象類關鍵字----abstract

Java面向對象中抽象類關鍵字(abstract)的基礎運用

        //abstract 抽象關鍵字!
		/*
		 * 注意:abstract只能修飾類和方法!
		 * 特點:
		 * 1.抽象方法必須放在抽象類中
		 * 2.抽象方法省略{ },只需聲明方法即可!
		 * 3.抽象類--->被子類繼承--->創建對象(其實就是抽象類不可以new對象)
		 * 4.抽象類中可以有普遍方法,也可以有抽象方法
		 * 5.非抽象類繼承類是,子類必須重寫抽象勒種的抽象方法
		 */

來讓我們直觀看一下抽象類怎麼用~

package com.abs;

//抽象類
public abstract class Player {
	public String name; //運動員的姓名屬性
	
	public void sleep() {
		System.out.println("來來來!一起睡覺!");
	}
// 抽象方法
	public abstract void sports(); //用abstract時不需要身體 即{ }
}
package com.abs;

public class PingPangPlayer extends Player {

	//子類必須事先父類的抽象方法
	@Override
	public void sports() {
		System.out.println("好好學習,天天向上");	
	}
	
}
​
package com.abs;

public class Main {

public static void main(String[] args) {

     Player play = new PingPangPlayer();
     play.name = "鄧亞萍";

     //調用從父類中繼承來的公共方法
     play.sports();
     foolballPlayer.sports();
 		 
	}

}

​

下面來舉個栗子:

請使用抽象類來實現下列要求

1.形狀:正方形 長方形 圓形

2.計算正方形的面積和周長

3.計算長方形的面積和周長

4.計算圓形的面積和周長

實現代碼如下:

package com.abs2;

public abstract class absExcise {
	  
	private double esge; //邊長
	private double r;//圓的半徑
	private double width,height;//長方形的長寬
      
    //抽象方法
    public abstract void mianji(); //計算面積
    public abstract void zhouchang(); //計算周長

    //定義getters和setters
	public double getEsge() {
		return esge;
	}

	public void setEsge(double esge) {
		this.esge = esge;
	}

	public double getR() {
		return r;
	}

	public void setR(double r) {
		this.r = r;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}

	public absExcise() {
		
	}

	public absExcise(double esge, double r, double width, double height) {
		super();
		this.esge = esge;
		this.r = r;
		this.width = width;
		this.height = height;
	}

	@Override
	public String toString() {
		return "absExcise [esge=" + esge + ", r=" + r + ", width=" + width + ", height=" + height + "]";
	}
      
      
}
package com.abs2;

public class square extends absExcise {
    //正方形
	@Override
	public void mianji() {
		double result = super.getEsge() * super.getEsge();
		System.out.println("正方形的面積" + result);
	}
	
	@Override
	public void zhouchang() {
		double result2 = super.getEsge() * 4.0;
		System.out.println("正方形的周長" + result2);
		
	}
}
package com.abs2;

public class specal_square extends absExcise{
     //長方形 
      @Override
     public void mianji() {
    	double result = super.getWidth() * super.getHeight();
    	System.out.println("長方形的面積" + result);
    }
      
      @Override
    public void zhouchang() {
    	double result2 = super.getHeight() * 2 + super.getWidth() * 2;
    	System.out.println("長方形的周長" + result2);
    }
}
package com.abs2;

public class resceal_yuan extends absExcise{
    //圓形
	@Override
	public void mianji() {
		double result = super.getR() * 3.14 * super.getR();
		System.out.println("圓的面積爲" + result);
	}
	
	@Override
	public void zhouchang() {
		double result2 = 2 * 3.14 * super.getR();
		System.out.println("圓的周長" + result2);
	}
}
package com.abs2;

public class Main {

	public static void main(String[] args) {
		absExcise abs = new specal_square();
		absExcise abs2 = new square();
		absExcise abs3 = new resceal_yuan();
		
		abs.setWidth(20); //給長方形的寬度賦值
		abs.setHeight(10);//給長方形的長度賦值
		abs.mianji();
		abs.zhouchang();
		
		abs2.setEsge(10); //給正方形的邊長賦值
		abs2.mianji();
		abs2.zhouchang();
		
		abs3.setR(32); //給圓形的半徑賦值
		abs3.mianji();
		abs3.zhouchang();
		
	}

}

 

發佈了59 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章