一、 抽象类

1. 抽象类

  1. [1]abstract修饰的类称为抽象类 <br /> [2]abstract修饰的方法称为抽象方法,只是定义方法,不写方法体<br /> [3]abstract不可以创建对象<br /> [4]抽象类中可以包含构造方法,满足继承的特性<br /> [5]抽象类中是可以定义普通方法<br /> [6]一个类继承了抽象类要么重写里面的所有抽象方法,要么这个类也是一个抽象类

2. equals和==

A. equals方法:
基本类型数据在比较的时候使用==
引用类型数据(对象)进行比较的时候使用equals
B. equals和==的区别:
equals只比较对象中的值
==既比较对象中的值又比较对象的内存地址
C. 为什么我们自己定义对象中eq方法不好用呢?
我们自己定义的eq方法 实际调用是object 类中eq ,我们通过源码发现Object类中eq方法还是比较的是对象的内存地址,Object 中这个方法根本满足不了我们的要求,所以这个时候就有了重写的必要性
D. 在使用equals方法进行对象比较的时候一定注意,一定要在当前对象中重写eq方法

3. hashcode和toString

hashcode:
两个对象的值相同,必须保证他们的hashcode值也是相同的。
两个对象的hashcode值相同是否两个对象也相同(×)
调用hashcode需要先进行重写,否则调用的是Object中的hashcode
toString:
如果我们直接输出对象,idea会在对象后面默认追加toString方法
默认调用Object中的toString方法,输出 包名.类名@地址值
重写toString的作用:为了快速输出对象的值

二、 接口

1. 接口

 [1]接口解决了java中单继承的问题<br />     [2]接口中定义的所有变量都是static  final修饰的<br />     [3]接口中定义的方法都是公开抽象的方法(1.7及之前)<br />     [4]接口是不可以创建对象  <br />     [5]接口中不含有构造方法<br />     [6]类和类之间是单继承    类和接口是多实现   接口和接口之间是多继承  <br />     [7]一个类中既有继承又有实现一定要先继承在实现<br />     [8]内外比较器

2. 接口中使用注意事项

[1]接口使用interface 修饰的<br />    [2]接口中成员变量都是使用public   static   final修饰的 也就意味着接口中全部都是常量<br />    [3]接口中成员方法使用public  abstract 修饰<br />    [4]接口不可以创建对象,也没有构造方法<br />    [5]类和接口之间是一个是实现关系(implements),关系是多实现,接口之间使用逗号(,)分隔<br />       例如: public class Zi implements Fu,Fu2<br />    [6]一个类既有继承又有实现  注意必选先继承类 再去实现接口<br />       例如:public class Zi extends Fu3 implements Fu,Fu2<br />    [7]接口和接口之间是一个继承关系,是一个多继承<br />       例如:public interface Fu2 extends Fu,Fu4

3. 接口和抽象类的异同

相同:

  1. 都可以由抽象方法,都要求子类或是实现类重写,都是对子类/实现类要求
  2. 都不可以被实例化

不同:

  1. 抽象类是被普通类继承(单继承),接口时被普通类实现(多实现),只有接口能继承接口。

Object中的方法

  1. 一个子类只能继承一个抽象类,一个实现类可以同时实现多个接口
  2. 抽象类中可以定义普通的成员变量,接口中只能定义共有的静态变量。
  3. 抽象类中可以由非抽象方法,接口中只能是抽象方法。(jdk1.7)
  4. 抽象类中可以由构造方法,接口中无构造方法

    equals()\  hashCode()\toString()\finalize()
    

    4. 新特性

    jdk1.8中:

  5. 定义静态方法 public static void aa(){……}

  6. 定义普通方法 public default void aa(){……}

jdk1.9中:

  1. 定义非抽象方法 private (static) void aa(){……}

    5. 接口的应用

    内部比较器 comparable 实现方法 compareTo(Object obj)
    外部比较器 comparator 实现方法 compare(A a1 , A a2)