抽象类和接口

 接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。

人可以吃东西,狗也可以吃东西,你可以把吃东西定义成一个接口,然后让这些类去实现它.

所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)

 

抽象类

定义:包含一个抽象方法的类就是抽象类。

  • 抽象方法:只声明而未实现的方法称为抽象方法,抽象类和抽象方法必须使用abstract修饰。
  • 抽象类不能直接实例化。抽象类必须有子类,子类必须覆写抽象类的抽象方法,如果不覆写抽象方法,子类还是抽象类。
  • 抽象类可以有构造方法,但构造方法不能被声明为抽象。
  • 抽象类不能被实例化,即不能用new去产生对象,但可声明对象。所以抽象类的引用可以作为方法的参数。

接口

定义:接口是抽象方法和常量值(static final修饰)的定义的集合,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

  • l Java接口不能有构造函数(构造器),不能被实例化。区别:抽象类可以有构造方法
  • l Java接口中的成员常量默认是用public static final标识的(可省略),都是全局静态常量,必须被显示初始化。
1 public interface AA {
2     static final String AUTHOR = "weller";
3     abstract void print();
4     abstract String getInfo();
5 }
  • l Java接口中的方法默认都是public abstract类型的(可省略),没有方法体。
  • 接口中不能包含静态方法。
  • 当一个类实现某个接口时,它必须定义这个接口的所有抽象方法(包括这个接口的父接口中的方法),否则这个类必须声明为抽象的,即可以定义一个抽象类去实现一个接口中定义的部分方法。
  • 一个接口不能实现(implements)另一个接口,但可继承(extends)多个其它的接口。
  • 一个类在继承一个父类的同时,可实现一个或多个接口,但extends关键字必须位于implements关键字之前。例:public class A extends B implements C, D {...}
  • l 接口和抽象类都不允许实例化对象,但都可以通过子类利用多态性向上转型完成实例化

抽象类和接口的区别(面试重点)

 

posted @ 2018-01-14 15:57  weller  阅读(192)  评论(0编辑  收藏  举报