关于abstract 与接口的比较

本人最近刚刚再学习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 方法的实现,那么可以考虑用接口。

刚学,自己做的总结。希望有所帮助。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值