不多說,上代碼先!!!!
class Bit {
Shape s;
Bit(Shape s){
this.s = s;
}
public double getTwo(Shape h){
double area = h.getArea();
return 2*area;
}
public static void main(String [] args){
System.out.print("tthellonn");
Shape s1 =new Square(1);
System.out.println("正方形的面積"+s1.getArea());
System.out.println("正方形的周長"+s1.getPan());
Shape s2 = new Rectangle(1,2);
System.out.println("長方形的面積"+s2.getArea());
System.out.println("長方形的周長"+s2.getPan());
Shape s3 = new Circle(1);
System.out.println("圓的面積"+s3.getArea());
System.out.println("圓的周長"+s3.getPan());
Bit t = new Bit(s1);
System.out.println("正方形面積的兩倍"+t.getTwo(s1));
}
}
abstract class Shape{//抽象類
public abstract double getArea();//抽象方法
public abstract double getPan();
}
class Square extends Shape{
protected double len;
Square(double len){
this.len = len;
}
public double getPan(){
return 4*len;
}
@Override
public double getArea() {
// TODO Auto-generated method stub
return len * len;
}
}
class Rectangle extends Square{
private double wid;
Rectangle(double len,double wid){
super(len);
this.wid = wid;
}
public double getArea(){
return wid*len;
}
public double getPan(){
return (wid+len)*2;
}
}
class Circle extends Shape{
private double r;
Circle (double r){
this.r = r;
}
public double getArea(){
return Math.PI*r*r;
}
public double getPan(){
return Math.PI*r*2;
}
}
注意事項:
(1)凡是用abstract 修飾符修飾的類被稱爲抽象類。凡是用abstract修飾符修飾的成員方法被稱爲抽象方法;
(2)抽象類中可以有零個或多個抽象方法,也可以包含非抽象的方法;
(3)抽象類中可以沒有抽象方法,但是,有抽象方法的類必須是抽象類;
(4)對於抽象方法來說,在抽象類中只指定其方法名及其類型,而不書寫其實現代碼;
(5)抽象類可以派生子類,在抽象類派生的子類中必須實現抽象類中定義的所有抽象方法;
(6)抽象類不能創建對象,創建對象的工作由抽象類派生的子類來實現;
(7)如果父類中已有同名的abstract方法,則子類中就不能再有同名的抽象方法;
(8)abstract不能與final並列修飾同一個類;
(9)abstract 不能與private、static、final或native並列修飾同一個方法。