克隆已实现的抽象方法
Cloning an implemented abstract method
我是Java的初学者,想请教一个问题:
是否可以克隆实现的抽象方法体?
示例:
public abstract class ClassA{
public abstract void method();
}
ClassA objA = new ClassA(){
public void method(){
System.out.println("Yay");
}
}
//creating objB with the same method as in objA
objB.method();
Output: Yay
你必须定义抽象的实现 class ClassA
:
public class ClassAImpl extends ClassA {
@Override
public void method() {
System.out.println("Yay");
}
}
然后您可以创建实例 objA
和 objB
:
public class ExampleClass {
public static void main(String[] args) {
ClassAImpl objA = new ClassAImpl();
objA.method();
ClassAImpl objB = new ClassAImpl();
objB.method();
}
}
输出:
Yay
Yay
是的,你可以。
只需将 Cloneable
接口实现到 ClassA
class。
public abstract class ClassA implements Cloneable {
public abstract void method();
@Override
public ClassA clone() {
try {
return (ClassA) super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
}
那你可以这样做了。
ClassA objB = objA.clone();
objB.method();
试试这个:
ClassA objB = objA.getClass().newInstance();
objB.method();
无需克隆。
我是Java的初学者,想请教一个问题:
是否可以克隆实现的抽象方法体?
示例:
public abstract class ClassA{
public abstract void method();
}
ClassA objA = new ClassA(){
public void method(){
System.out.println("Yay");
}
}
//creating objB with the same method as in objA
objB.method();
Output: Yay
你必须定义抽象的实现 class ClassA
:
public class ClassAImpl extends ClassA {
@Override
public void method() {
System.out.println("Yay");
}
}
然后您可以创建实例 objA
和 objB
:
public class ExampleClass {
public static void main(String[] args) {
ClassAImpl objA = new ClassAImpl();
objA.method();
ClassAImpl objB = new ClassAImpl();
objB.method();
}
}
输出:
Yay
Yay
是的,你可以。
只需将 Cloneable
接口实现到 ClassA
class。
public abstract class ClassA implements Cloneable {
public abstract void method();
@Override
public ClassA clone() {
try {
return (ClassA) super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
}
那你可以这样做了。
ClassA objB = objA.clone();
objB.method();
试试这个:
ClassA objB = objA.getClass().newInstance();
objB.method();
无需克隆。