一、 抽象类
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. 接口和抽象类的异同
相同:
- 都可以由抽象方法,都要求子类或是实现类重写,都是对子类/实现类要求
- 都不可以被实例化
不同:
- 抽象类是被普通类继承(单继承),接口时被普通类实现(多实现),只有接口能继承接口。
Object中的方法
- 一个子类只能继承一个抽象类,一个实现类可以同时实现多个接口
- 抽象类中可以定义普通的成员变量,接口中只能定义共有的静态变量。
- 抽象类中可以由非抽象方法,接口中只能是抽象方法。(jdk1.7)
抽象类中可以由构造方法,接口中无构造方法
equals()\ hashCode()\toString()\finalize()
4. 新特性
jdk1.8中:
定义静态方法 public static void aa(){……}
- 定义普通方法 public default void aa(){……}
jdk1.9中: