• 【Java基础】Java接口的总结


    什么是接口

      接口和抽象类很相似,也是一种抽象的概念,用Interface关键字来修饰。那有了抽象类为啥还要有个接口呢,既然都是抽象的,要一个不就可以了吗?其实不是这样的,抽象类是对一类事物共性的一种抽象,但是对于一些属于部分个体的特性和功能,我们需要接口来进行扩充。例如:Person是对不同人的抽象,如黑人,白人,黄种人等,他们都有姓名,年龄,肤色等属性,都会走,会跑,会吃东西,会睡觉这些功能,但是对于一些特技,例如有些人有普通人不具备的特性,例如会将手转360度,这些特别的非共性的东西可以放在接口中,拥有这种特性的人可以实现接口达到继承抽象方法 相似的目的。

    接口中的成员特点

    从接口中的成员变量,构造方法和成员方法去总结。

    1. 成员变量:
      成员变量不管是否显示定义类型,都默认为public static final类型的静态常量,所以不能被修改,继承,可以通过接口名去访问 
    2. 构造方法:
      接口没有构造方法!!!这个和抽象类不同。那实现接口的子类如何初始化呢?因为子类初始化都默认调用super();
      class Student extends Object implements InterPerson{
         public Student() {
             super();
         }
      }

      其实所有类如果没有写继承类,默认都是extends Object这个祖先类,所以这里的super()调用的是Object类中的无参构造方法。

    3. 成员方法:
      成员方法默认是public abstract修饰的!也就意味中接口中的成员方法必须无方法体;这个不同于抽象类,抽象类中方法可以是抽象,也可以有自己的方法,而且也可以有非public类型方法。
      另外,由于成员方法默认是public abstract修饰的,所以自然不能和final以及static同时存在了。

    总结起来就是:接口中无默认构造方法,所有成员变量都是public static final修饰的,所有的成员方法都是public abstract修饰的。

    接口、类之间的继承(extends)实现(implements)关系

    1. 类与类:继承关系,只能单继承,但是可以多层继承;
    2. 类与接口:实现关系,一个类可以实现多个接口,以逗号分割;

      1. 一组测试用例,顺便测试下一个类继承两个接口并且接口中定义了相同的方法。
      2. /**
         * Created by lili on 15/10/23.
         */
        
        interface Father {
            public abstract void show();
        }
        
        interface Mother {
            public abstract void show();//注意,这里定义的方法和Father中的一致
            public abstract void show2();
        }
        
        class Son implements Mother, Father{
            public void show(){
                System.out.println("Which show?");
            }
        
            public void show2() {
                System.out.println("Mother show");
            }
        }
        
        public class InterfaceTest {
            public static void main(String[] args) {
                Father father = new Son();
                father.show();
        
                Mother mother = (Mother)father;
                mother.show();
        
                mother.show2();
            }
        }

        运行结果:

      3. Which show?
        Which show?
        Mother show
        
        Process finished with exit code 0

        运行结果表明,Father接口的引用指向的Son的实例,再强制转为Mother的引用,还是可以访问show,说明这个show是Mother和Father接口中show的共同实现。

    3. 接口与接口:继承关系,可以单继承,也可以多继承。

    抽象类和接口的区别

      1. 成员区别

        抽象类(abstract class):
          成员变量:可以变量,也可以常量(final类型)
          构造方法:有
          成员方法:可以抽象,也可以非抽象
        接口(interface):
          成员变量:只可以常量(public static final)
                     构造方法:无构造方法
          成员方法:只可以抽象(public abstrart)

         2. 关系区别
       类与类:继承,单继承
       类与接口:实现,单实现,多实现
       接口与接口:继承,单继承,多继承

       3. 设计理念区别
       抽象类:被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能
       接口:被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能

  • 相关阅读:
    CUDA[2] Hello,World
    mysql操作
    virsh 连接虚拟机 (vnc 或 控制台)
    ssh访问流程
    使用ceph-deploy进行ceph安装
    openstack 的horizon的结构
    django 后台格式化数据库查询出的日期
    web 应用的部署
    工具
    python性能优化
  • 原文地址:https://www.cnblogs.com/gslyyq/p/4904804.html
Copyright © 2020-2023  润新知