虽然是Clone()在Object里面是protected权限,即使Person类是和Object不同包,但是protected定义的不同包的子类也可以继承父类的方法啊?
class Person implements Cloneable
{
private String name ;
private int age ;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:"+this.name+",年龄:"+this.age ;
}
public Object clone() throws CloneNotSupportedException{
return super.clone() ;
}
}
public class TestDemo
{
public static void main(String args[]) throws Exception
{
Person p1 = new Person("张三",30) ;
Person p2 = (Person)p1.clone() ;
p2.name = "李四" ;
System.out.println(p1) ;
System.out.println(p2) ;
}
}
Clone必须交给实现这个类的程序员去实现。否则从逻辑上说,别人很难写出真正的Clone方法。看这个代码
class A
{
public A a;
public A()
{
a = this;
}
}
这样的代码如果自动克隆,就会无限递归。
问题简化一下就是: A是B的子类,B有一个protected的方法C, A的对象是否能够直接调用C方法,跟Object,clone没有什么关系:
protected方法在子类中可用,指的是子类的代码中可以用,不是子类的对象。
首先指出你的说法有问题 你说protected定义的,class Person implements Cloneable 而你这个是默认的并不是protected定义的 protected是protected
默认是默认 两者有区别 其次不用说了 你已经做了实现Cloneable接口
只能说语法就是这么规定的,必须重写clone函数并且需要实现Cloneable接口才行。
顺便提一下,你的p2.name属性是无法访问到的。
jdk文档描述:
类内部 package内 子类 其他
protected 允许 允许 允许 不允许
default 允许 允许 不允许 不允许
default就是没有显示的指明方法或者成员变量的具体声明
可以看出protected描述的方法或者成员变量 子类是完全可以使用的 即使是不在一个包内
谢谢