java的多态性及接口

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();
		

	}

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值