interface A{
void f();
}class B implements A{
public void f(){
...........
}
}A a=new B();//通过接口类型的引用变量来访问对象,通过a来引用B实现了接口A中的方法f()
void f();
}class B implements A{
public void f(){
...........
}
}A a=new B();//通过接口类型的引用变量来访问对象,通过a来引用B实现了接口A中的方法f()
解决方案 »
- 提取数字问题
- 倒底java有没有办法将内存中的PCM声音数据直接播放?
- 网站编程 与j2ee
- Exeception e中的e
- java程序中如何实现文字自右向左滚动效果?
- 困扰好几天了,关于resin的问题!
- JAVA中,容器被重新设置后,哪种布局管理器的容器中的组件大小不随容器大小的变化而改变?
- 为什么都设置好了,还是Exception in thread "main" java.lang.NoClassDefFoundError
- 如何熟悉Exception的种类?完全通过学习API的document?
- 用JAVA编写类似OIC那样驻留在状态条中的程序
- focus问题
- JTable的问题:如何自动滚动到选中的那一行
void f();
}class B implements A{
public void f(){
System.out.println("this is B");
}
}class C implements A{
public void f(){
System.out.println("this is c");
}
}
class Test{
public static void main(String args[]){
A a = new B();
a.f(); //这里打印出,this is b
a = new C();
c.f(); //这里打印出 this is c
}
}
通过接口创建新的类然后通过新类实现接口的方法
实现后的封装性更好,多个组件可以共享同一个接口对象,
而且通过对接口类的扩展(构造函数)来传递更多的参数,不像addActionListener(this),只有一个固定参数,可以MyAction ac=new MyAction(a,b,c,d,e),然后再到接口类中使用这些参数。但是好像都使用的内部类(Core Java I)
我觉得动作这个抽象类也很不错(AbstractAction)
interface Shape{
void draw();
}class Triangle implements Shape {
public void draw() { //实现接口
System.out.println("draw a Triangle.");
}
//other code.
}class Square implements Shape{
public void draw() { //实现接口
System.out.println("draw a Square.");
}
//other code.
}class Circle implements Shape {
public void draw() { //实现接口
System.out.println("draw a Circle");
}
//other code.
}class AllShape {
public static void main(String[] args) {
Shape[] s = new Shape[3];
s[0]=new Triangle();
s[1]=new Square();
s[2]=new Circle();
for(int i=0;i<s.length;i++)
s[i].draw(); //通过接口类型的引用变量来访问对象,
//这里会根据不同的形状画出图形
}
}
推荐《Java编程思想》
上面这种基础问题讲得太详细了,而且深入浅出
就拿java.sql.Connection来说
对于不同的数据库实现连接数据库的逻辑是不一样的,哪么sun是否把所有的数据库连接的逻辑都写出类来呢,这是不可能的,于是接口就来了,sun只要定义一些方法,这些方法是在java.sql.Statement等其它类中用到的.这样一来如何实现数据库连接就不要由sun来实现了.对于扩展,如果以后出现一新的数据库哪么它也可以根据sun的接口实现里面的方法就OK了.