zoukankan      html  css  js  c++  java
  • java:接口特性 接口与抽象类/普通类的区别

    接口

    • 书面定义: 
      Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

    在java中不直接支持多继承,因为会出现调用的不确定性。所以java将多继承机制进行改良,在java中变成了多实现。

    当一个抽象类里面全部是抽象方法时,且与继承类之间实现功能体现更强于所属关系,就可以定义为接口interface,更趋近于体现功能的集合特点

    1 接口的特点:

    1:接口不可实例化,可结合多态进行使用     接口 对象=new 对象();

    2:接口里的成员属性全部是以 public(公开)、static(静态)、final(最终) 修饰符修饰,

        接口里的成员方法均为抽象方法,全部是以 public(公开)、abstract(抽象) 修饰符修饰

                    全局常量的修饰符会自动设为:public static final

                    抽象方法的修饰符会自动设为:public abstract

    实际编程时,可将接口中的方法标记为public abstract,将常量标记为public static final,可提高程序清晰度。也可不标记。

    4:接口里不能包含普通方法、静态方法以及实例域,可包含常量。

    5:只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化。 否则,这个子类就是一个抽象类。接口是不能直接通过new来实例化的,没有具体实现的接口实例化也没有意义

    2 抽象类的特点:

    1:成员属性必须不能是 private(私有) 修饰符修饰

    2:成员方法可包含普通方法(虚方法)和abstract(抽象)修饰的抽象方法

    3:子类可选择性的重写虚方法,必须实现父类的所有抽象方法

    3 接口与普通类: 
    类与类之间是继承的关系 
    类与接口之间是实现关系,而且类的单继承可以有多实现(同时实现多个接口) 
    接口与接口之间是继承关系,而且接口的继承可以是多继承 
    (因为接口的方法并没有方法体,即便继承也不用实现方法)

    4 接口在OOP的特点体现: 
    1.是对外暴露的规则 
    2.是对程序的功能扩展 
    3.接口的出现降低了耦合性 
    关于接口与抽象类的区别请看

    接口与抽象类的区别详解

    class Demo
    {
        void show()
        {
        System.out.println("父类方法");
        }
    }
    interface Demo1
    {
        public static final int NUM = 1;
        public abstract void method();
    }
    interface Demo2
    {
        double Circle_DIRECT = 2.45; //系统自动加上public static final
        void  method();//系统自动加上public abstract
        int add(int a, int b);
    }
    class DemoImpl extends Demo implements Demo1,Demo2
    {
        public void method()
        {
            System.out.println("实现接口1,接口2");        
            //实现具体方法,同时了覆盖两个接口中的方法
        }
         public int add(int a,int b)
        {
            return a+b;
        }//必须覆盖所有实现接口的抽象方法,否则还是要定义为接口
    }
    public class  InterfaceDemo
    {
        public static void main(String[] args) 
        {
            DemoImpl  d = new DemoImpl();
            d.show();
            d.method();
            System.out.println(d.add(1,2)); 
            System.out.println(d.NUM);
            System.out.println(Demo1.NUM);
        }
    }

  • 相关阅读:
    FreeMarker MyEclipse IDE
    Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
    Mybatis SqlSessionTemplate 源码解析
    Mybatis Interceptor 拦截器原理 源码分析
    MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析
    MyEclipse SVN 下面切换用户的解决方案
    SpringMVC 多个数据源 配置多个事物管理器 Multiple Transaction Managers
    Activiti 获取定义
    [No000066]python各种类型转换-int,str,char,float,ord,hex,oct等
    [No000065]python 获取当前时间
  • 原文地址:https://www.cnblogs.com/dengyungao/p/7525048.html
Copyright © 2011-2022 走看看