关于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 {
}
把光标放在抽象类或接口中的方法名上: 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 方法的实现,那么可以考虑用接口。
原址: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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统