使用对象克隆时要注意,首先要检查该对象是否可以克隆,即该对象是否实现了
Cloneable
接口,如果该对象实现了这个接口,则该对象可以被克隆,否则将抛出一个
CloneNotSupportException
。
Object
类中有一个
clone
()方法,但是该类没有实现
Cloneable
接口,所以如果一个
Object
对象直接使用
clone
()方法,将会抛出异常。
Object
的子类如果希望实现克隆,需要实现
Cloneable
接口。在实现接口中的
clone
()方法时,可以直接调用
Object
中的克隆方法,即使用
super.clone
()语句。
在类的继承中,如果子类中的变量或方法覆盖了父类中的变量或方法,其父类的变量和方法还是存在于内存中的,在子类中可以使用
super
关键字进行访问。
Java
中,用
abstract
关键字修饰不能在类内实现的方法,这样的方法称为抽象方法,含有抽象方法的类也必须声明为
abstract
,这样的类叫做抽象类。抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要声明为抽象类。抽象类本身不具备实际的功能,只能用于派生子类,而定义为抽象的方法必须在子类派生时重载。如果一个类被定义为抽象类,则该类不能进行实例化,必须通过重载的方式来实现抽象类中的方法。
编译时多态
是通过方法的重载来实现的:即用相同的名字在类中定义不同的方法,根据参数的个数、类型和返回值类型来加以区分。而运行时多态是通过类继承的方法重写实现的:子类对象可以作为父类对象来使用,因为子类通过继承具备了父类的所有属性,在程序中凡是可以使用父类对象的地方,都可以使用子类对象来代替。对于重写的方法,
Java
会根据调用该方法的实例的类型来决定选择哪个方法。对子类的实例,如果子类重写了父类的方法,则运行时系统调用子类的方法,如果子类没有重写该方法,则调用父类的方法。因此,一个父类对象可以通过引用子类的实例来调用子类的方法。