1、程序理解
//接口的应用
//定义一个PCI接口:
interface PCI {
void start(); // 定义抽象方法start()
void stop(); // 定义抽象方法stop()
}
// 定义 NetworkCard类实现PCI接口
class NetworkCard implements PCI {
// 实现start()方法
public void start() {
System.out.println(“send…”);
}
// 实现stop()方法
public void stop() {
System.out.println("Network stop.");
}
}
// 定义 SoundCard类实现PCI接口
class SoundCard implements PCI {
// 实现start()方法
public void start() {
System.out.println(“Du Du…”);
}
// 实现stop()方法
public void stop() {
System.out.println(“Sound stop.”);
}
}
// 定义MainBoard类
// 将子类对象作为PCI参数传进来:
class MainBoard {
// 在这里传了一个接口参数p
// 定义一个userPCICard()方法,接收PCI类型的参数
public void userPCICard(PCI p) {
// 正是因为实现了PCI接口里面的方法,才能将对象传给这个引用变量
p.start(); // 调用传入对象的start()方法
p.stop(); // 调用传入对象的stop()方法
}
}
// 使用接口实现的子类对象
public class Example3 {
public static void main(String[] args) {
MainBoard mb = new MainBoard(); // 创建MainBoard类的实例对象
NetworkCard nc = new NetworkCard(); // 创建NetworkCard类的实例对象nc
mb.userPCICard(nc); // 调用MainBoard对象的userPCICard()的方法,将nc作为参数传入
SoundCard sc = new SoundCard(); // 创建NetworkCard类的实例对象sc
mb.userPCICard(sc); // 调用MainBoard对象的userPCICard()的方法,将sc作为参数传入
}
}
2、编写程序
(1)声明复数类Complex,成员变量包括double类型的实部real和double类型的虚部im,成员方法包括三个重载的构造方法:实部和虚部构造方法Complex(double real, double im);无参构造方法 Complex(),该无参构造方法内部用this(0,0) 调用前一个构造方法;只有实数部分的构造方法Complex(double real),该构造方法内部用this(real,0)调用两个参数的构造方法。此外,该复数类的成员方法还包括复数加法、复数减法、字符串描述(重写Object的toString方法,输出a+bi的形式)、相等比较(判断两个复数是否相等,需要重写Object的equals方法)等方法。定义测试类,在main方法中进行相应的测试。
package com.glut.bean;
//声明复数类Complex
public class Complex {
//成员变量包括double类型的实部real和double类型的虚部im
double real;
double im;
//实部和虚部构造方法
Complex(double real, double im){
this.real=real;
this.im=im;
}
//无参构造方法
Complex(){
//调用前一个构造方法
this(0,0) ;
}
//只有实数部分的构造方法
Complex(double real){
//调用两个参数的构造方法
this(2,1);
this.real=real;
}
//复数加法
public void addition(double real,double im){
Complex c;
}
//复数减法
public void minus(){
}
//字符串描述
public String toString(){
return null;
}
//相等比较
public void equals(){
}
}
(2)定义两个接口Area(声明getArea方法求面积)和Volume(声明getVolume方法求体积),声明球类Globe,实现Area和Volume接口,计算球的表面积和体积。设计测试类,在main方法中进行相应的测试。
public interface Area {
//声明getArea方法求面积
void getArea();
}
public interface Volume {
//声明getVolume方法求体积
void getVolume();
}
//球类Globe实现Area和Volume接口
public class Globe implements Area,Volume{
double r,area,volume;
//初始化
public Globe(double r){
this.r=r;
}
//计算球的表面积
public void getArea() {
area=(r*r)*3.14*4;
System.out.println("球的表面积为:"+area);
}
//计算球的体积
public void getVolume() {
volume=(r*r*r)*3.14*4/3;
System.out.println("球的体积为:"+volume);
}
}
//测试类
public class GobalTest {
public static void main(String[] args) {
Globe globe=new Globe(2);
globe.getArea();
globe.getVolume();
}
}
测试结果:
(3)定义父类Shape作为抽象类,并在类中定义抽象方法求周长和面积
public abstract class Shape {
//定义抽象方法求周长和面积
public abstract void ShapeCalculate();
}
定义Shape子类圆形(circle),具有半径属性和常量PI,同时必须实现父类中的抽象方法
package com.glut.service;
import com.glut.bean.Shape;
//圆形(circle)类
public class Circle extends Shape{
float r;
final float PI=3.14f;
public Circle(float r){
this.r=r;
}
//实现父类的抽象方法
@Override
public void ShapeCalculate() {
float area,cir;
area=PI*r*r;
cir=2*PI*r;
System.out.println("圆形面积:"+area+"\t圆形周长:"+cir);
}
}
定义Shape子类长方形(rectangle),具有长和宽的属性,同时必须实现父类的抽象方法
package com.glut.service;
import com.glut.bean.Shape;
//长方形(rectangle)类
public class Rectangle extends Shape{
double a,b;
public Rectangle(double a,double b){
this.a=a;
this.b=b;
}
//实现父类的抽象方法
@Override
public void ShapeCalculate() {
double area,cir;
area=a*b;
cir=a*2+b*2;
System.out.println("长方形面积:"+area+"\t长方形周长:"+cir);
}
}
创建图形面积周长计算器(ShapeCalculate),具有计算不同图形面积和周长的方法。
创建测试类TestShape类,在其main()方法中对ShapeCalculate计算面积和周长方法进行测试
package com.glut.Test;
import com.glut.bean.Shape;
import com.glut.service.Circle;
import com.glut.service.Rectangle;
public class TestShape {
public static void main(String[] args) {
//创建一个对象指向长方形类
Shape shape=new Circle(5);
shape.ShapeCalculate();
}
}
package com.glut.Test;
import com.glut.bean.Shape;
import com.glut.service.Circle;
import com.glut.service.Rectangle;
public class TestShape {
public static void main(String[] args) {
//创建一个对象指向长方形类
Shape shape=new Rectangle(5,3);
shape.ShapeCalculate();
}
}