java学习笔记01
面向对象
面向对象是一种更优秀的程序设计方法,它的基本思想是使用类、对象、继承、封装、消息等基本概念进行程序设计。
面向对象三大特征
- 继承:子类继承父类,获得父类的属性和方法。
- 封装:将对象的实现细节隐藏,通过一个公共的方法来暴漏该对象的功能。
- 多态:子类对象直接赋值给父类变量,调用父类方法,指向子类实现。
重写与重载
重写发生在子父类之间,子类方法与父类方法方法名,参数列表相同,返回值小于等于父类方法,抛出异常小于等于父类方法,访问修饰符大于等于父类方法,若父类方法访问修饰符为private,则不能被重写!
重载发生在同类之中,方法名相同,参数列表不同,则构成重载的关系,与访问修饰符无关。
hashCode()与equals()
hashCode用于获取散列码,equals用于比较两个对象是否相等。
如果两个对象相等,那他们的hashCode一定相等。
如果两个对象hashCode相等,这两个对象不一定相等。
Object类中提供的equals默认是用==实现的,为了进行值的比较,需要对equals进行重写。由于equals与hashCode具有联动性(保证了hashMap的精确度),所以equals重写时,也要对hashCode进行重写。
==和equals()的区别
用==进行比较时,基本数据类型比较的是值,引用数据类型,比较的是对象的地址。
equals()重写前使用的是==进行比较,重写后是对值进行比较(String、Integer等的equals都进行了重写)。
接口和抽象类
接口是一种规范,只进行约定,不提供实现;抽象类是一种模板设计,目的是代码复用。
接口 | 抽象类 | |
---|---|---|
方法 | 抽象方法 | 抽象方法+普通方法 |
变量 | 静态常量(final static) | 静态常量+普通变量 |
构造器 | 不能含有构造器 | 可以含有(不是为了创建对象,而是让其子类调用来完成属于抽象类的初始化操作) |
初始化块 | 不能含有 | 可以有 |
继承实现 | 多实现 | 单继承 |
实例化 | 不能被实例化 | 不能被实例化 |
java8后,接口可以含有默认方法和静态方法,方便接口扩展;java9以后接口可以含有私有方法,避免代码重复,确保可重用性,提高可读性。
interface 接口名{
静态常量;
抽象方法;
//java8以后默认方法和静态方法
public default void test(){
System.out.println("默认方法");
}
public static String test2(){
System.out.println("静态方法");
return "Hello Word";
}
//java9以后私有方法
private void common(){
System.out.println("私有方法")