Java 抽象類 abstract

Java 抽象類


在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。

抽象類除了不能實例化對象之外,類的其它功能依然存在,成員變量、成員方法和構造方法的訪問方式和普通類一樣。

由於抽象類不能實例化對象,所以抽象類必須被繼承,才能被使用。也是因爲這個原因,通常在設計階段決定要不要設計抽象類。

父類包含了子類集合的常見的方法,但是由於父類本身是抽象的,所以不能使用這些方法。

Java中抽象類表示的是一種繼承關係一個類只能繼承一個抽象類而一個類卻可以實現多個接口

 

特點:

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

實例:



public class Main {
	//定義抽象類
	public static abstract class Player {
		public String name;
		public void sleep() {
			System.out.println("一起睡覺!");
		}
		//	抽象方法
		public abstract void sports();
	}
	//繼承抽象類
	public static class PingPangPlayer extends Player{
		//子類必須實現父類的抽象方法
		public void sports() {
			System.out.println("打乒乓球");
		}
	}
	//繼承抽象類
	public static class FootballPlayer extends Player{
		//子類必須實現父類的抽象方法
		public void sleep() {
			System.out.println("Let's sleep.");
		}
		public void sports() {
			System.out.println("踢足球");
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Player player = new PingPangPlayer();
		player.name = "鄧亞萍";
		FootballPlayer foolballPlayer = new FootballPlayer();
		foolballPlayer.name = "武磊";
		//調用從父類中繼承來的公共方法
		player.sleep();
		foolballPlayer.sleep();
		player.sports();
		foolballPlayer.sports();
	}

}

 

練習:

* 練習:
* 1.定義一個抽象類(形狀類)
         抽象方法---計算面積  計算周長
* 2.定義長方形,繼承於抽象類
* 3.定義正方形,繼承於抽象類
* 4.定義圓形,繼承於抽象類
//shape 類
public abstract class shape {
	public abstract double S();
	public abstract double C();
}

//Circle 類
public class Circle extends shape{
	public final double pi = Math.PI;
	private double r;
	public double S() {
		return r * r * pi;
	}
	public double C() {
		return 2.0 * pi * r;
	}
	public double getR() {
		return r;
	}
	public void setR(double r) {
		this.r = r;
	}
	public Circle(double r) {
		this.r = r;
	}
}

//Rectangl
public class Rectangl extends shape{
	private double a, b;
	public double S() {
		double s = this.a * this.b;
		return s;
	}
	public double C() {
		double c = (this.a + this.b) * 2.0;
		return c;
	}
	public double getA() {
		return a;
	}
	public void setA(double a) {
		this.a = a;
	}
	public double getB() {
		return b;
	}
	public void setB(double b) {
		this.b = b;
	}
	public Rectangl(double a, double b) {
		this.a = a;
		this.b = b;
	}
}

//Square 類
public class Square extends shape{
	private double a;
	
	public double S() {
		return a * a;
	}
	public double C() {
		return a * 4.0;
	}
	public double getA() {
		return a;
	}
	public void setA(double a) {
		this.a = a;
	}
	public Square(double a) {
		this.a = a;
	}
}

//Main 類 及main方法
public class Main {
	
	public static void main(String[] args) {
		shape a = new Circle(1.0);
		System.out.println(a.C());
		System.out.println(a.S());
		shape b = new Rectangl(1.0, 2.0);
		System.out.println(b.C());
		System.out.println(b.S());
		shape c = new Square(1.0);
		System.out.println(c.C());
		System.out.println(c.S());
	}
}

 

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