How to clone abstract objects with final fields in Java? : <p>In <a href="https://stackoverflow.com/questions/7378843/cloning-in-java">this</a> question and this <a href="http://www.agiledeveloper.com/articles/cloning072002.htm" rel="noreferrer">post</a> is explained how to clone objects with final fields by using protected copy constructors.</p>

<p>However, supposing that we have:</p>

<pre><code>public abstract class Person implements Cloneable
{
    private final Brain brain; // brain is final since I do not want 
                // any transplant on it once created!
    private int age;
    public Person(Brain aBrain, int theAge)
    {
        brain = aBrain; 
        age = theAge;
    }
    protected Person(Person another)
    {
        Brain refBrain = null;
        try
        {
            refBrain = (Brain) another.brain.clone();
            // You can set the brain in the constructor
        }
        catch(CloneNotSupportedException e) {}
        brain = refBrain;
        age = another.age;
    }
    public String toString()
    {
        return "This is person with " + brain;
        // Not meant to sound rude as it reads!
    }
    public Object clone()
    {
        return new Person(this);
    }

    public abstract void Think(); //!!!!
    …
}
</code></pre>

<p>Returns an error since we can't instantiate an abstract class. How can we solve this?</p>
