1)Object对象clone()方法
package com.stu.resource;
public class Obj implements Cloneable{
public static void main(String[] args) {
/**
* protected修饰的方法作用范围:1)同类、2)同包、3)不同包的子类调用父类
* 对于第三点要理解:
* 此处当主调为父类的引用时 ==> object, 是无法调用父类的protected方法的
*/
// Object object = new Object();
// object.clone();
/**
* 此处主调是Obj对象 即子类的引用指向父类的protected方法(没毛病)
*
* 但是Run As throws Exception
* java.lang.CloneNotSupportedException
*/
// Obj obj = new Obj();
// try {
// Obj clone = (Obj)obj.clone();
// } catch (CloneNotSupportedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
/**
* 对于上面的Exception产生的原因:
* Object的源码
* protected native Object clone() throws CloneNotSupportedException;
*
* 对于关键字native需要一定的理解:native可以理解为自然的、原生的,java用于调用非java程序的方法,可以理解为一个接口,只是这个接口的实现在非java程序中
* 那怎么做?clone()可以理解为一个接口,也就是说它并不是一个接口,那我们看看java怎么做的
* java提供了一个接口Cloneable,这个接口没有任何方法,仅作为一个说明,一个类要覆盖clone()方法,需要实现Cloneable接口
*/
Obj obj = new Obj();
try {
Obj obj1 = (Obj) obj.clone();
System.out.println(obj.hashCode());
System.out.println(obj1.hashCode());
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2)getClass()方法
package com.stu.resource.object.getclass;
public class GetClass {
public static void main(String[] args) {
/**
* 谈到Object对象的getClass()方法,就得与Object.class作比较
* getClass()方法是动态的,class是关键字,“类字面量”
* String.class 是能对类名的引用取得在内存中该类型class对象的引用,
* 而new String().getClass() 是通过实例对象取得在内存中该实际类型class对象的引用。
*/
Animal animal = new Dog();
System.out.println(Animal.class.getName());
System.out.println(animal.getClass().getName());
//result
/**
* com.stu.resource.object.getclass.Animal
* com.stu.resource.object.getclass.Dog
*/
}
}
、、、、