您的位置:首页 > 编程语言 > Java开发

关于abstract 与接口的比较

2015-10-07 22:55 281 查看
本人最近刚刚再学习java,在论坛里发现了一个有趣的问题,

原址:http://bbs.csdn.net/topics/391830364#new_post

抽象类和接口中有同一个抽象方法,一个类继承了那个抽象类并实现了那个接口,那么这个子类重写的方法是调用接口的还是抽象类的?

例如:

public abstract class abstractClass{

public abstract void test();

}

public interface interfaceClass{

public abstract void test();

}

public class E extends abstractClass implements interfaceClass{

@Override

public void test(){

//TODO Auto-generated method stub

}

}

那么子类是调用抽象类中的test()还是接口中的test()呢?

在eclipes中将上述实现:

代码如下:

package day1002;

abstract class dada1

{

public abstract void test(int a,int b);//抽象类中的方法

}

interface interfaceclass

{

public abstract void test(int x,int y);

//接口中的方法

}

class E extends dada1 implements interfaceclass{

public void test(int a,int b)

{

System.out.println(a+b);

}

}

public class dada {

public static void main(String[] args) {
// TODO Auto-generated method stub
//下面是实验用的第一种方法①
/*
E e = new E();
dada1 abs=new E();
*/
//下面是第二种方法②
/*
dada1 abs=new E();
abs.test(1,3);
*/
//下面是第三种方法③
/*
InterfaceClass inter=new E();
inter.test();
*/
}


}

把光标放在抽象类或接口中的方法名上: ctrl+shift+g 可以查看这个方法的引用,如图:



在Search窗口中可以看到如下结论:

**如果只写①的话,我发现两个方法都可以聚焦到main方法中

图片就不贴了**

如果只写②的话,在接口中的方法是找不到引用的



**翻译过来就是 workspace 中没有引用,0匹配

如果只写③的话,在抽象类中的方法是找不到引用的**

还是要看main中是怎么 引用的

下面摘录了 一个英文网址:

http://lvvbbe.com/questions/8147988/what-is-the-difference-between-an-interface-and-abstract-class

有兴趣的可以看看。

关于abstract 与接口的比较:

1.abstract 类和接口都可以使用abstract 方法

2.接口中只可以有常量,不能有变量,而abstract 变量中既可以有常量也可以有变量。

3.abstract 类中也可以非abstract 方法,接口不可以

那么在设计程序的时候应该怎么确定是使用接口呢 还是抽象类呢

。abstract 类除了提供重要的需要子类重写的abstract 方法外,也提供了子类可以继承的变量和非abstract 方法,如果某个问题需要使用继承才能更好的解决,比如自乐除了需要重写父类中的abstract 方法,还需要从父类继承一些变量或者继承一些重要的非abstract 的方法,就可以考虑到使用abstract 类,如果某个问题不需要继承,只是需要若干个给出某些重要的abstract 方法的实现,那么可以考虑用接口。

刚学,自己做的总结。希望有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 接口和抽象