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

被折叠的 条评论
为什么被折叠?



