一、接口知識點回顧
1、接口表示方法
- 和類class一樣的使用方法
2、接口裡面的内容
- 成員變量都是static常量且要賦初值。
- 成員方法都是抽象abstract方法,隻聲明、不具體實作。
3、建立對象
- 隻能使用接口回調
二、抽象類知識點回顧
1、抽象類的表示方法
- 關鍵詞abstract,用來修飾類class的
2、抽象類裡面的内容
- 隻有成員方法,且都是abstract修飾的,隻聲明、不具體實作。
3、建立對象
- 隻能使用上轉型對象
三、案例實戰
1、實驗内容
注:圓柱體表面積:2πr(r+h) 圓柱體體積:πr²h
- 定義一個G2D接口,存放在包com.xhu.interf中。接口中定義π的值為3.14159,再定義一個求Shape面積的方法getArea()。
- 定義一個抽象類Shape,存放在包com.xhu.abstracts中。公有抽象方法getPerimeter()求周長。
- 編寫一個圓類Circle,存放于包com.xhu.test中,它繼承抽象類Shape,實作接口G2D,在Circle中定義私有屬性半徑及實作求圓的周長和面積方法。然後在圓類中編寫一個主方法,計算半徑為10的圓的周長和面積。
- 編寫接口G2D的子接口G3D,存放在包com.xhu.interf中,在G3D中增加計算體積的方法getVolume()。
- 編寫一個圓柱體類Cylinder,它繼承了Shape類并實作G3D接口,重寫了抽象類中的方法和接口中的方法。然後再編寫一個主方法,能計算半徑為10,高為15的圓柱體的表面積和體積。
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();
}
}