接口与抽象类

来源:互联网 发布:电脑玩游戏网络延迟 编辑:程序博客网 时间:2024/04/29 12:01

接口中的属性 默认是 public static final类型  就算你不加 默认也是存在

方法默认都是public abstract类型 不加默认也存在

比如

interface K

{

    String abc="sdfd";

    void add() throws Exception;

}

实际上编译时 是这样

interface K

{

    Public static final String abc="sdfd";

    public abstract void add() throws Exception;

}

 

为什么属性是static

   因为 接口不能实例化,非静态变量必须是实例化的对象或则有方法体的方法可以可以调用 所以不是静态就没有意义了

为什么必须是 public

  因为接口本来就是一种约束 定义抽象方法 就是约束子类必须去实现 必须是public 否则访问不到

  属性不定义成public 外界访问不到 同样没有意义了

为什么方法是abastract

因为带有abstract 关键字的方法,子类才必须实现 所以带有abstract关键字的方法

不能带有final  abstract 是子类必须继承  final 是该方法不能被重写 所以会产生冲突

 比如

interface K

{

    Public String abc="sdfd";

    public void add() throws Exception;

}

 

public class H implements K{

    public String abc="";

    public  final void add() {

       System.out.println(K.abc);

    }

    public static void main(String[] args) {

       H h=new H();

       h.add();

    }

}

 

子类实现接口时基本的结构必须与接口一致,你不能再方法上添加如 static修饰符

不得将 public 修饰符改成private  但是你可以加上修饰符 final 表示子类的子类不能重写该方法

 

其实继承接口实现方法 继承类 重写方法 的语法是一致的

 

接口可以继承接口.抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数(这句话有点问题 看下面例子 V类并没有明确的构造函数 只有默认的构造函数).

 

class V implements IV{

    public void add()

    {

       System.out.println("add");

    }

}

interface IV

{

    public void add();

}

interface IV1

{

    public void add();

}

public abstract class 抽象类继承 extends V implements IV,IV1  {

 

    public  void add() {

       // TODO Auto-generated method stub

       super.add();

    }

}

 

抽象类 与接口的区别

1接口内只能是功能的定义,抽象类中可以包括功能的定义和功能的实现。

 2. 抽象类是用来extends的,而继承有一定的局限性,只能继承一个类
而接口就不同,可以同时实现多个接口

3 接口字段定义默认为public static final,而抽象类的则默认为friendly

原创粉丝点击