具有默认构造函数的Abstract类与具有私有构造函数的类之间的区别是什么?
我还有另一个疑问, 考虑下面这个程序。任何人都可以解释一下。这些代码有用吗?
abstract class AbstractAndPrivate
{
AbstractAndPrivate()
{
AbstractAndPrivate ref= new AbstractAndPrivate(1) {
@Override
int m2() {
// TODO Auto-generated method stub
return 0;
}
};
}
void m1()
{
System.out.println("m1() accessed");
}
abstract int m2();
AbstractAndPrivate(int a)
{
}
public static void main(String[] args) {
System.out.print("hello ");
AbstractAndPrivate ref= new AbstractAndPrivate() {public int m2(){return 1;}};
System.out.println(ref);
ref.m1();
ref.m2();
}
}
答案 0 :(得分:3)
具有默认构造函数的Abstract类与具有私有构造函数的类之间的区别是什么?
如果有默认构造函数,它将从子类中调用。如果它是私有,您将只能在同一个类中创建子类,因为这是私有构造函数可以访问的唯一上下文。
请注意,您提供的代码既不也不是 - 它是显式提供受包保护的无参数构造函数。那不是私有的,它不是默认的构造函数。
该类是否为抽象是与它提供的构造函数正交,尽管只有私有构造函数的抽象类强制您在声明类中创建子类以创建实例,而不是而不仅仅依赖于在声明类中创建实例。
答案 1 :(得分:0)
另外,抽象类可以有一个抽象方法,需要由子类实现(除非它们也是抽象的)
编辑: - 1?来吧,抽象方法也解释了抽象类和私有构造函数类之间的逻辑差异。请...