看了许多关于接口的帖子,我对于接口仍然有两个问题不明白:
1. 接口是如何弥补单一继承之不足的?
2. 接口是如何实现“通信”的?对于这两个问题,我真的很希望有哪位大哥能够给出实际的例子。如果没有例子,只要能讲得清楚也行,小弟在此磕头了。
1. 接口是如何弥补单一继承之不足的?
2. 接口是如何实现“通信”的?对于这两个问题,我真的很希望有哪位大哥能够给出实际的例子。如果没有例子,只要能讲得清楚也行,小弟在此磕头了。
解决方案 »
- log4j不起作用
- swing之JTable的使用
- 最近服务器经常负载很高,导致业务终止,高手帮忙看看c3p0配置是否合理。
- java线程生产者消费者问题
- Jtree 如何存到数据库 如何又从数据库读出 形成一颗树,在线等 高手门来讨论吧!
- abstract class和interface有什么区别?
- 怎样才能让输入框只接受从键盘输入呢 ?
- execl中的日期如何导进数据库,高手指教
- 用 DataOutputStream 能否往文件中写入中文字符??急,在线等。。。
- Class.forName()遇到的问题。
- 如何用JSP中的监听器技术统计
- Vector与Object[][]的问题,急求啊!!!!(100分)
interface InterfaceOne {
void doJobOne();
}interface InterfaceTwo {
void doJobTwo();
}public class MyJob implements InterfaceOne, InterfaceTwo {
public static void main(String[] args) {
MyJob mj = new MyJob();
mj.doJobOne();
mj.doJobTwo();
}
public MyJob() {
System.out.println("constructor");
}
public void doJobOne() {
System.out.println("do job one.");
} public void doJobTwo() {
System.out.println("do job two.");
}
}
在继承的情况下,子类实例化的对象是可以直接调用父类的方法的,但是用接口的话,怎么可以产生继承的效果?
另外,我上机试了一下。比如我希望类B的对象b能够也具有类A的方法,并能够调用该方法,那我直接在类B中申明一个类A的对象,然后在main方法中申明b,这样b不就具有了A的功能了吗?这样不是就可以不用接口了?class B{
void bb(){
System.out.println("bbbbb");
}
}
class A{
B b=new B();
void aa(){
b.bb();
}
}
public class Ex4{
public static void main(String args[]){
A a=new A();
a.aa();
}
}
另外,我上机试了一下。比如我希望类B的对象b能够也具有类A的方法,并能够调用该方法,那我直接在类B中申明一个类A的对象,然后在main方法中申明b,这样b不就具有了A的功能了吗?这样不是就可以不用接口了?
------------------------
这如果从设计模式的角度看,可以看作builder模式,相当于你把零散的每个类组合成一个大类,但是这样的模式不适合通用化,除非都是抽象类。其实,接口的主要目的就是为了通用化,就好象生产零件都要符合国际标准接口一样,比如我有辆车,里面某个零件坏了,这时我用另外一个厂家的零件替换也可以,只要接口是一样的就行;否则,如果接口不一样,我就只能用原来那个厂家的零件,如果原来那个厂家倒闭了,那我的车就报废了。所以,考虑到通用化,生产商就要定义一个标准的零件接口,每个厂商根据这个接口生产自己的零件,这些生产出来的零件就是具体实现该零件接口的子类。由于生产商不同,生产出来的零件也各具特点,比如某厂商的车座是固定的,另一厂商的车座是可以躺下的,但都符合车座的接口标准,所以用户可以根据需要选购不同的车座。这就是接口相同,子类多样化。
同样的,在实际的程序开发中,比如
interface B {
void install();
}
class A {
public void install(B b) {
B.install();
}
}
这样,把A类看作车,B类看作车座,A类要安装车座时,只需要调用B类的install接口就行了,这时A并不关心B是被那个厂商生产的,只要有install接口就行。而其他生产商就可以根据B接口生产出不同的子类B1,B2等等
这样某个人要给车配上车座时就可以这样
class Person {
public static void main(String[] args) {
A a = new A();
B b = new B1(); //这里可以根据实际情况自己选择B1或是B2
a.install(b);
}
}