一、接口知识点回顾
1、接口表示方法
- 和类class一样的使用方法
2、接口里面的内容
- 成员变量都是static常量且要赋初值。
- 成员方法都是抽象abstract方法,只声明、不具体实现。
3、创建对象
- 只能使用接口回调
二、抽象类知识点回顾
1、抽象类的表示方法
- 关键词abstract,用来修饰类class的
2、抽象类里面的内容
- 只有成员方法,且都是abstract修饰的,只声明、不具体实现。
3、创建对象
- 只能使用上转型对象
三、案例实战
1、实验内容
- 定义一个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π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();
}
}