abstract 是修饰符,表示抽象的,用来修饰抽象类和抽象方法。
abstract 修饰的类是抽象类,抽象类不能创建对象,主要用于被子类继承。
abstract 修饰的方法是抽象方法,该方法没有方法体,只定义功能,不提供实现,用于让不同的子类去实现(覆写)。
子类创建对象时需要调用父类的构造方法,因此抽象类作为父类需要有构造方法。
抽象方法必须在抽象类中。
抽象类中可以没有抽象方法。
一个类中只要有抽象方法,那么这个类就是抽象类。
这两个修饰符互斥,不可以同时出现。
子类如果要继承抽象类,就必须实现所有的抽象方法,否则该子类也要用 abstract 修饰,成为一个抽象类。
抽象类的本质就是要让子类通过覆写父类方法实现功能,满足覆写方法的条件,因此可以使用多态。
接口不能创建对象,没有构造方法,但是可以发生多态。
接口和接口之间是继承关系,并且可以多继承。
如果接口和抽象类都能实现某个功能的时候,优先使用接口。因为类和接口之间是多实现的关系,如果使用接口可以保留类继承,扩展性更强。
在 JDK1.8 之前,接口完全抽象,只允许出现抽象方法和常量。
从 JDK1.8 开始,接口中可以出现静态方法和默认方法(等同为成员方法)。
在 interface 中,修饰符可以省略。
常量前的 public static final 都可以省略。不写的话默认就是 public static final 。
方法前的 abstract 可以省略。不写修饰符的话默认就是 abstract 。
修饰符为 default ,得到默认方法,需要创建子类对象进行调用。这个方法相当于成员方法,有具体的实现功能。
Object 是根类,所有类都直接或间接继承 Object 。
Object 中有许多方法,比如 toString , equals , finalize 。
toString 代表了该对象的字符串形式的描述方式。
输出引用类型的时候会自动调用该对象的 toString 方法,默认的 toString 方法是打印内存地址。
equals 方法的设计目的是比较两个对象是否相等。
默认的 equals 比较的是内存地址。
如果我们不需要比较内存地址,而是要比较某些属性值的话,就需要根据需求进行覆写。
通过 String 类的源码可以知道, String 已经覆写了 equals 方法,比较的是值是否相同。
JVM 在进行自动垃圾回收的时候,会调用该对象的 finalize 方法。
finalize 方法本身没有回收功能,只是在被回收之前调用。
堆内存中存在某个对象,但是没有任何引用指向该对象的时候,该对象就成为了垃圾数据。
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤