美文网首页
2019-05-10

2019-05-10

作者: 小神000 | 来源:发表于2019-05-10 17:02 被阅读0次

汇总

接口

  1. 接口中可以定义常量,不能定义变量;
  2. 接口中的属性都是全局静态常量,接口中的常量必须在定义时指定初始值。
  3. 接口中只有全局抽象方法。
  4. 接口不能实例化,接口中不能有构造。
  5. 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
  6. 接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。

接口的作用是什么?

①首先是关于全局变量的定义,使用接口可以达到一定程度的解耦合作用。例如在接口中定义一些全局变量。在发生需求变化时。只需要改变接口中的值即可。

②其次是说明一下接口的真正作用是建立在很多的对象类、并且类同时拥有很多的方法(需要实现的功能)。这种情景下,使用接口可以非常明显的感觉到接口的作用。

抽象类 为了多态的实现

接口 为Java中的多重继承

一、明明可以在类中直接写所需的方法,为什么还要多写一个接口(或抽象类)

1.  减少代码的书写(上边分析的代码重载) 
2.  提高了代码的可维护性和扩展性。 
3.  在团队合作中,代码的规范性

二、抽象类和接口都差不多,在什么时候才选择使用接口

1.  在当前类族中不是必须的(例如Tuger需要而Rabbit不需要)的方法时
2.  不同类族的多个类需要实现同样的方法时(接口)

接口的意义

规范、扩展、回调

抽象类的意义

为其子类提供一个公共的类型 封装子类中得重复内容 定义抽象方法,子类虽然有不同的实现 但是定义是一致的

抽象类接口区别-360

  1. 默认的方法实现
    抽象类可以有默认的方法实现完全是抽象的。接口可以使用default关键字实现默认方法而不要求其子类进行实现

  2. 实现
    子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。
    子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现

  3. 构造器
    抽象类可以有构造器
    接口不能有构造器

  4. 与正常Java类的区别
    除了你不能实例化抽象类之外,它和普通Java类没有任何区
    接口是完全不同的类型

  5. 访问修饰符
    抽象方法可以有public、protected和default这些修饰符
    接口方法默认修饰符是public。你不可以使用其它修饰符。

  6. main方法
    抽象方法可以有main方法并且我们可以运行它
    接口没有main方法,因此我们不能运行它。

  7. 多继承
    抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。

  8. 速度
    它比接口速度要快
    接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。

  9. 添加新方法
    如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。
    如果你往接口中添加方法,那么你必须改变实现该接口的类。

Java8的接口默认方法

如果一个接口是继承另外一个接口的,这两个接口中都有同样的默认方法,那么选择父接口中的方法,也就是只保留父接口中的默认方法。

当一个类实现两个接口的时候,其中一个接口实现了默认方法,但是另一个不管是默认方法还是抽象方法,编译器报接口冲突,让我们自己解决。

必须重写方法。若要调父接口方法使用

class InterfaceC implements InterfaceA, InterfaceB {
    public void f() {
        InterfaceA.super.f();
    }
}

接口中的默认方法和继承的父类方法冲突了,那么这个时候会选择父类中的方法,而不是接口中的默认方法。这个也叫做类优先原则,它可以保证与Java7的兼容性。也就是说,在接口中实现的一个默认方法,它不会对Java8之前写的代码产生影响。所以,我们也不能在接口中定义toString()和equals()这样的接口,因为根据类优先的原则,Object中的这些方法会保留

抽象类 VS 接口(带有默认方法的接口)

相同点
•都可以有方法实现(Java8 之前接口不能有方法实现)
•子类不需要实现全部的方法(Java8 之前接口的子类需要实现全部的方法)

不同点
•抽象类不可以多重继承,接口可以
•抽象类表示的是"is-a"关系,接口表示的是"like-a"关系
•接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能改变其值
•抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值


内部类的作用-乐视

  1. 内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
  2. 在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
  3. 创建内部类对象的时刻并不依赖于外围类对象的创建。
  4. 内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
  5. 内部类提供了更好的封装,除了该外围类,其他类都不能访问

父类的静态方法能否被子类重写-猎豹

不能


Java虚拟机

JVM 答疑解惑 | 墨镜猫

关于Dalvik,我们该知道些什么? | 墨镜猫

相关文章

网友评论

      本文标题:2019-05-10

      本文链接:https://www.haomeiwen.com/subject/yllooqtx.html