/*面向對象具有抽象性、封裝性、繼承性、多態性。抽象性是將具有一致的數據結構(屬性)和行爲(操作)的對象抽象成類
一個類就是一種抽象。封裝性體現在Java中的數據除了基本類型的數據外,都以對象的形式存在,對象是方法與數據的封裝體。
繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關係。在定義和實現一個類的時候,
可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作爲自己的內容,並加入若干新的內容。
多態性指相同的操作或函數、過程可作用於多種類型的對象上並獲得不同的結果。不同的對象,收到同一個消息可以產生不同的結果。
多態性允許每個對象以適合自身的方式去響應共同的消息,增強了軟件的靈活性和重用性。本章將具體介紹面向對象的特徵及應用。
*/
package JAVA_Project_01_05;//創建一個包
//抽象類是Java中一種特殊的類。抽象類不能創建對象,而只能由其派生子類創建。抽象類是專門作其他類的父類來使用的。
// 本實例介紹如何運用抽象類獲得不同圖形的面積。
// 用關鍵字abstract修飾符來定義抽象類。abstract放在關鍵字class之前,語法格式:(public)abstractclass類名{}。
// 並用abstract來定義抽象方法,abstract放在方法返回類型之前。語法格式:abstract返回類型方法名()。
//· 抽象類必須作爲其他類的父類,並且,子類要全部實現父類中的抽象方法,否則也要聲明爲抽象類。
abstract class Geometric {//創建抽象類
String color = "block";
int weight = 2;
abstract float getArea();//抽象構造方法求面積
abstract float getPerimeter();//抽象構造方法求周長
}
class Circle extends Geometric {//繼承Geometric,求圓的面積和周長
float radius;
Circle(float number) {//帶參數的構造方法
radius = number;
}
protected float getArea() {//實現父類抽象方法求圓的面積
return 3.14f * radius * radius;
}
protected float getPerimeter() {//實現父類抽象方法求圓的周長
return 2 * 3.14f * radius;
}
}
class Rectangle extends Geometric {//繼承Geometric求長方形的面積和周長
float width;
float height;
Rectangle(float width, float height) {//帶參數的構造方法
this.width = width;
this.height = height;
}
float getArea() {//實現父類抽象方法求長方形的面積
return width * height;
}
float getPerimeter() {//實現父類抽象方法求長方形的周長
return 2 * (width * height);
}
}
public class TextAbstract {//操作抽象類求圖形面積的類
public static void main(String[] args) {//Java程序主入口處
System.out.println("1.獲得圓的面積與周長");
Circle circle = new Circle(4);//創建圓對象實例
System.out.printf("圓的面積:%s%n", circle.getArea());
System.out.printf("圓的周長:%s%n", circle.getPerimeter());
System.out.println("2.獲得長方形的面積與周長");
Rectangle rectangle = new Rectangle(3, 4);//創建長方形對象實例
System.out.printf("長方形的面積:%s%n", rectangle.getArea());
System.out.printf("長方形的周長:%s%n", rectangle.getPerimeter());
}
}
/*
(1)用關鍵字abstract創建Geometric抽象類,並聲明兩個抽象構造方法。默認的抽象方法擁有受保護的訪問權限,即默認用protected訪問修飾符修飾。簡單地說,只有類內部和子類可以訪問該成員。
(2)Circle和Rectangle類繼承Geometric抽象類,必須實現所有的抽象方法,否則需要在關鍵字class前加abstract成爲抽象類。*/