java接口和抽象类

来源:互联网 发布:c语言杨辉三角七行七 编辑:程序博客网 时间:2024/06/03 12:19

1、抽象类最大的特征就是在普通类的基础上追加了抽象方法,而事实上抽象类定义里面也存在有若干的问题
。将抽象方法和普通方法写在一起有些乱
。抽象类本身会存在单继承的局限

2、抽象类和接口最大的区别在于:抽象子类只允许继承一个抽象类,而接口的子类可以同时实现多个接口,避免了单继承的局限。接口本质上来讲属于一个特殊的类,接口的组成只有2种结构:全局常量、抽象方法,而接口的定义要使用 interface关键字。

3、可是接口和抽象类一样,由于里面都存在抽象方法,所以肯定无法直接使用关键字new实例化,所以接口使用原则:
。接口一定要有子类,子类要使用implements可以实现多个父接口
。接口的子类一定要覆写接口中的全部抽象方法
。接口的对象实例化可以依靠子类对象的向上转型完成,于是不同的子类对于同一个抽象方法会有不同的实现

//使用接口interface IMessage { // 使用I代表这是一个接口    public static final String INFO = "test" ;     public abstract void print() ; } class MessageImpl implements IMessage {     public void print() {          System.out.println("Hello World !") ;          System.out.println(INFO) ; } } public class TestDemo {     public static void main(String args[]) {          IMessage msg = new MessageImpl() ;          msg.print() ; } } 

4、既然接口中全部都是有抽象方法和全局常量所组成,所以以下两种定义效果一样:

     interface IMessage {         public static final String INFO = "test" ;         public abstract void print() ;     }     interface IMessage {         String INFO = "test" ;         public void print() ; 

5、接口中的全部的访问权限都是public

ps:
。说到了接口和抽象类,那么就必须注意:一个抽象类可以同时实现多个接口,但是反过来,一个接口不允许继抽象类。
。虽然一个接口无法去继承一个抽象类,但是,一个接口缺可以使用extends继承多个父接口
。在实际开发中接口有三大核心意义:定义不同层间的操作标准、表示一种能力、将远程方法视图暴露给客户端。

6、接口和抽象类的的区别(面试经常问的):
。关键字不同:抽象类(abstract class) 接口(interface)

。 组成不用:抽象类(属性,常量,构造,普通方法,抽象方法) 接口(全局常量,抽象方法)

。 权限不同:抽象类(可以使用各种权限) 接口(只能是public)

。子类实现:抽象类(extends) 接口(interface)

。关系:抽象类(可以实现多个接口) 接口(接口不允许继承抽象类,但是可以继承多个父接口)

。使用:都需要定义有子类,子类一定要覆写所有抽象方法,并且依靠子类对象像上转型实现抽象类或者接口的对象实例化操作

。限制:抽象类(一个子类只能继承一个抽象类) 接口(一个子类可以实现多个接口)

。抽象类里可以没有抽象方法

。如果一个类里有抽象方法,那么这个类只能是抽象类

当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。