天天看點

Java多态性應用:接口interface、抽象類abstract、繼承extends、實作接口implements

一、接口知識點回顧

1、接口表示方法

  • 和類class一樣的使用方法

2、接口裡面的内容

  • 成員變量都是static常量且要賦初值。
  • 成員方法都是抽象abstract方法,隻聲明、不具體實作。

3、建立對象

  • 隻能使用接口回調

二、抽象類知識點回顧

1、抽象類的表示方法

  • 關鍵詞abstract,用來修飾類class的

2、抽象類裡面的内容

  • 隻有成員方法,且都是abstract修飾的,隻聲明、不具體實作。

3、建立對象

  • 隻能使用上轉型對象

三、案例實戰

1、實驗内容

  1. 定義一個G2D接口,存放在包com.xhu.interf中。接口中定義π的值為3.14159,再定義一個求Shape面積的方法getArea()。
  2. 定義一個抽象類Shape,存放在包com.xhu.abstracts中。公有抽象方法getPerimeter()求周長。
  3. 編寫一個圓類Circle,存放于包com.xhu.test中,它繼承抽象類Shape,實作接口G2D,在Circle中定義私有屬性半徑及實作求圓的周長和面積方法。然後在圓類中編寫一個主方法,計算半徑為10的圓的周長和面積。
  4. 編寫接口G2D的子接口G3D,存放在包com.xhu.interf中,在G3D中增加計算體積的方法getVolume()。
  5. 編寫一個圓柱體類Cylinder,它繼承了Shape類并實作G3D接口,重寫了抽象類中的方法和接口中的方法。然後再編寫一個主方法,能計算半徑為10,高為15的圓柱體的表面積和體積。
注:圓柱體表面積:2πr(r+h)    圓柱體體積:πr²h

2、實驗代碼

package Exam;
/**
 *接口裡面的隻有static常量、abstract抽象方法
 */
public interface G2D {
    public static double π=3.14159;
    public abstract void getArea();    
}
           
package Exam;
/**
 *抽象類裡面都是抽象方法:隻是聲明
 */
public abstract class Shape {
    public abstract void getPerimeter();
}
           
package Exam;
/**
 *一個類同時繼承和實作接口
 */
public class Circle extends Shape implements G2D {

    private double r;

    public void setR(double r) {
        this.r = r;
    }
    @Override//實作抽象類的抽象方法
    public void getPerimeter() {
        double perimeter;
        perimeter = π * r * 2;
        System.out.print("周長:" + perimeter);
    }
    @Override//實作接口的抽象方法
    public void getArea() {
        double area;
        area = π * Math.pow(r, 2);
        System.out.print("面積:" + area);
    }
}
           
//圓形Circle測試類
package SyTest;
import Exam.Circle;
public class CircleTest {
    public static void main(String[] args){
        Circle c=new Circle();
        c.setR(10);
        c.getPerimeter();
        System.out.println("");
        c.getArea();
    }
}
           
package Exam;
/**
 * 通過關鍵字extends聲明一個接口是另一個接口的子接口。
 * 子接口将繼承父接口中的全部方法和常量。
 */
public interface G3D extends G2D{
    public abstract void getVolume();
}
           
package Exam;
/**
 *一個類同時實作繼承類和實作接口
 */
public class Cylinder extends Shape implements G3D {
    private double r;
    private double h;
    public void setR(double r) {
        this.r = r;
    }
    public void setH(double h) {
        this.h = h;
    }
    @Override//底圓周長=2πr
    public void getPerimeter() {
        double perimeter ;
        perimeter= 2 * π * r;
        System.out.print("底圓周長:" + perimeter);
    }
    @Override//體積=表面積*高=πr²h
    public void getVolume() {
        double volume ;
        volume= π * r * r * h;
        System.out.print("體積:" + volume);
    }
    @Override//表面積=2πr(r+h) 
    public void getArea() {
        double area ;
        area= 2 * π * r * (r + h);
        System.out.print("表面積:" + area);
    }
}
           
package SyTest1;
import Exam.Cylinder;
//測試類CylinderTest
public class CylinderTest {
    public static void main(String[] args) {
        Cylinder cy=new Cylinder();
        cy.setH(15);
        cy.setR(10);
        cy.getArea();
        System.out.println("");
        cy.getVolume();
    }
}