[Java基础]-- 接口、抽象类

一直都在使用接口,没怎么用过抽象类,今天面试遇到了面试官提问:

抽象类和接口有什么区别啊?

下面就关于这个问题好好研究一下,希望在以后的工作中能牢记。。

以下是《疯狂java讲义》第三版对他们的解释:

 

  • 接口可以继承接口。
  • 抽象类可以实现(implements)接口,但不可以继承自接口。
  • 抽象类可以继承具体类。
  • 抽象类中可以有静态的 main方法。抽象类里可以有抽象方法,抽象方法一定要在抽象类里,抽象类可以派生,抽象类的父类可以是非抽象类。
  • 某一个类如果定义了某个方法是抽象方法,其子类并非一定要实现(不想实现父类中的抽象方法的话,子类同样定义成抽象类就是了)。
  • 当你想实例,就要实现所有抽象方法。
  • 可以使用接口声明对象,但必须使用其实现类实例化,接口实例化报错。
  • Collection list = new ArrayList();Collection是接口,Arraylist是其实现类。这样的话,接口引用c就指向了具体的实现接口的对象,多态的体现。这样的好处在于通过接口c来调用的方法可以屏蔽掉具体的方法实现。换而言之,我只需要知道c要做什么,而不需要知道c怎么做,也就是在JAVA编程中经常用到的接口回调,即面向接口的编程更为重要的一点是Collection c只是引用,是一个指向具体实现类的引用。

 

 

一、使用区别

接口:

类中使用时需要实现本接口的方式

抽象类:

类中使用时是采用继承本类的方式

 

举例:

1、现在有抽象类动物类(AnimalInfo.java)

public abstract class AnimalInfo {
public abstract void cry();//哭方法

public void call(){}//正确的方式 

//public  void cry();   //错误的方式
    
}

 

2、有接口类动物类(Animal.java)

 

public interface Animal {
public void cry();

public abstract void call(); //正确的方式
// public abstract void hit(){};//错误的方式
}

 

新建一个动物:猫(Cat.java)

 

实现哭方法的第一种方式:继承抽象类AnimalInfo.java 

 

 

public  class CatInfoextendsAnimalInfo {
//实例化时必须实现cry()方法
private AnimalInfo am=new AnimalInfo() {
@Override
public void cry() {

}
};

 

 

/**由于继承AnimalInfo类而必须实现的cry()方法*/

 

 

@Override
public void cry() {
//调用方法
am.call();
}
}

 

实现哭方法的第二种方式:实现接口类Animal.java

 

public class Cat implementsAnimal{
@Override
public void cry() {

}
}

 

二、定义

接口:特殊的抽象类,接口中可以有抽象方法

抽象类:抽象类中的方法都是抽象方法

 

参考:

http://blog.csdn.net/xw13106209/article/details/6923556

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往事随风ing

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值