一、abstract class
1.包含抽象方法的类一定是抽象类,但抽象类不一定包含抽象方法。
2. ①抽象类一定要使用abstract修饰符;
格式:public abstract class 类名{}
②抽象类的构造函数必须是protected;
③抽象方法没有方法体,就是不用写“{}”。 抽象方法是非静态的。
3.抽象类不能使用new实例化,但是可以创建数组。
SimpleGeometricObject []obj=new SimpleGeometricObject[3];
二、interface
格式:修饰符 interface 接口名{
//常量声明
//抽象方法签名//注意:只有签名,没有方法体
}
1.接口只能包含常量和抽象方法(方法没有实现)。特殊地,Cloneable接口没有方法体,就是Cloneable接口没有常量也没有抽象方法。
(1)∵接口中的数据一定是public static final,方法一定是public abstract,∴可以简写
——————————2.class v.s. interface————————
所有的类都有一个共同的根Object类,但是接口没有共同的一个根。一个接口可以继承多个接口,一个类可以实现多个接口,但是一个类只能继承一个类。
3.类实现接口的话,要声明
修饰符 class 类名 extends 父类名 implements 接口名{
//在类中重写接口
}
4.Comparable接口定义了compareTo方法,用于比较对象。
如果数组中的对象是Comparable接口的实例,那么可以调用Arrays.sort(Object[])对数组进行排序。
5.Cloneable接口(空的)
方法clone实现对象浅拷贝。一个对象能被克隆的两个条件:
①实现Cloneable接口,使拷贝合法,避免出现CloneNotSupportedException②重写clone方法。
~native表示这个方法不是java写的,但它是在JVM中针对本地平台实现的。
6.(1)shallow copy:拷贝对象时仅拷贝对象本身,包括对象中的基本变量,但不拷贝对象包含的引用指向的对象;就是说如果一个数据域本身是基本类型,那么复制的就是他的值;如果一个数据域是对象,那么复制的就是对象的引用,而不是它的内容,即浅复制前后的这两个数据域指向同一个对象。
(2)deep clone:不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。在深复制中,如果一个数据域是对象的引用,那么复制的就是它的内容,即深复制前后的这两个数据域指向不同的对象。
要实现深复制的话,就要重写clone方法:
整理不易,亲亲点个赞呗~~