2016-05-17 88 views
1
public class Human extends Main implements Cloneable{ 
    public String name; 
    public Human(){}; 
    public Human(String input){ 
     this.name = input; 
    } 
} 

import java.util.Scanner; 
public class Main{ 
    public static void main(String[] args) { 
     try{ 
     Scanner in = new Scanner(System.in); 
     String input = in.next(); 

     Human h1 = new Human(input); 
     Human h2 = (Human) h1.clone(); 

     System.out.println("Human original " + h1.name); 
     System.out.println("Human clone " + h2.name); 
     in.close(); 
     } catch(Exception e){} 
    } 
} 

为什么人类必须扩展主?如果不是,Human h2 =(Human)h1.clone()会给出错误“来自Object类型的方法clone()不可见”Object类型的方法clone()不可见。扩展解决它

Human类扩展Main的要点是什么?人类不需要从Main类继承任何东西。

回答

2

Object.clone();受保护,这意味着它对同一包中的子类和类可见。如果您未扩展Main,则clone()不可见,因为HumanObject继承(不可见到Main)。然而,延伸Main意味着clone()Main继承,它位于相同的包中,使其可访问。

但是,通常情况下,您会执行public版本的clone(),即使只是在其中调用super.clone();

0

Cloneableclone()是来自早期Java版本的遗留设计错误;不要使用它们。

如果你想创建一个实例的“克隆”,提供一个拷贝构造函数,和自己复制字段:

public Human(Human other) { 
    this.name = other.name; 
} 

有一个在有效的Java描述与克隆问题的项目详细,以及为什么你应该避免它(也described here)。