用接口实现模拟计算机和U盘的数据之间的相互传递

本文介绍如何通过定义公共接口实现计算机与U盘之间的数据读写。通过创建SDcard和SSD类实现USB接口,解决因互相引用导致的空指针异常和栈溢出问题。最终通过父类传递参数,实现数据交换,同时避免了接口中无参方法的浪费。

U盘可以向计算机中写入数据,也可以读取计算机发送的数据,同理,计算机也是如此。

定义一个公共接口,定义了计算机和U盘公共的一些功能,包括充电和读取数据;然后就分别建立U盘类和计算机类来实现了接口;在读取数据时的想法是:当一个类的写方法调用时,然后另一个类的读方法也调用,涉及到两个类的数据的调用;

然后想到了一下做法:

1.将类作为属性传递:

public class SDcard{

public SSD ssd;

……

public void read(SSD ssd){

System.out.println("从计算机中读取数据:"+ssd.getComputerSend());}

}

另一个也是如此,,然后就报错了,异常类型:空指针异常:因为我们的ssd并没有被实例化;

2.在构造方法中,初始化另一个类:

然后编辑器不再报错,然后在主函数运行,直接抛出:java.lang.StackOverflowError

就是栈溢出:

原因是我们在构造方法中初始化了另一个类,然后就不停初始化,所以就溢出了;

SDcard sDcard=new SDcard();
SSD ssd=new SSD();


解决:新建了一个父类:在里面分别建立了两个含有两个类作为参数的同名读方法,

public void read(SSD ssd) {
// // TODO Auto-generated method stub
//
// }
//
// public void read(SDcard sDcard) {
// // TODO Auto-generated method stub
//
// }

然后我们在各自的读方法中,就可以使用两个类作为参数来调用get方法了;

瑕疵就是:我们实现了父类的含参方法,可是也实现了接口的无参方法,但是无参的方法就没得到使用,有点浪费

最后改进:在父类中,直接把父类作为参数使用,然后在子类的方法中,使用父类的对象调用子类的属性或方法,而且在接口的方法中,把父类作为参数写上,此时我们使用的就是接口和父类的了,不会出现多余的方法,而且,在父类中,也只是一个方法:

源码如下:

package Game;


public class SDcard extends ElectricMachine implements USB {

protected String SDsend="hello";
public String getSDsend() {
return SDsend;
}


public void setSDsend(String sDsend) {
SDsend = sDsend;
}


@Override
public void charge() {
System.out.println("u盘充电中");
}


@Override
public void write() {
System.out.println("从U盘向计算机中写入数据:"+SDsend);
}





@Override
public void read(ElectricMachine eMachine) {
//

System.out.println("从计算机中读取数据:"+((SSD) eMachine).getComputerSend());
}






}

计算机类:

package Game;


public class SSD extends ElectricMachine implements USB{


private String computerSend="World";

public String getComputerSend() {
return computerSend;
}

public void setComputerSend(String computerSend) {
this.computerSend = computerSend;
}
@Override
public void charge() {
System.out.println("电脑充电中");
}


@Override
public void write() {
System.out.println("从计算机向U盘中写入数据:"+computerSend);
}





@Override
public void read(ElectricMachine eMachine) {

System.out.println("从u盘中读取数据:"+((SDcard) eMachine).getSDsend());
}





}

接口类:

package Game;


interface USB{
public void charge();
public void write();
public void read(ElectricMachine eMachine);

}

父类:

package Game;


public class ElectricMachine {
public void read(ElectricMachine eMachine){

}
// public void read(SSD ssd) {
// // TODO Auto-generated method stub
//
// }
//
// public void read(SDcard sDcard) {
// // TODO Auto-generated method stub
//
// }
}


主类:

package Game;
/**
 * 使用接口模拟计算机将U盘中的数据写入到计算机硬盘中的过程,以及将数据写入到U盘中
 * 
 * @author Administrator
 *
 */
public class CoreJava01 {
public static void main(String[] args) {
SDcard sDcard=new SDcard();
SSD ssd=new SSD();
sDcard.write();
ssd.read(sDcard);
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值