1

我正在开发一个基于 Java EE 的 webApplication。

我有一个抽象类,我需要在其中进行一次性操作(数据库调用)。

所以在下面的示例代码中,我将它粘贴到它的构造函数中,但不知道为什么构造函数没有被调用。

请告诉我如何解决这个问题。

public abstract class Preethi {

 Preethi()
 {
    System.out.println("hirerew");
 }

 public static void main(String args[])
 {
    int a  = 12;

    if(a==0)
        System.out.println("a");

    if (a==12)
        System.out.println("12");
 }

}
4

5 回答 5

1

您永远不会创建抽象类 Preethi 的实例。为什么你期望构造函数被调用?创建一个非抽象子类并创建它的一个实例,然后将调用构造函数。main 是静态的,可以在不实现 Preethi 的情况下调用它。

public class X extends Preethi
{ /* Your implementation here */}

然后主要:

public static void main(String [] args)
{
  Preethi preethi = new X(); // This will call the constructor of Preethi
}
于 2012-08-30T14:05:43.917 回答
0

尽管抽象类不能用于实例化对象,但它们可以用于创建对象引用,因为 Java 的运行时多态方法是通过使用超类引用来实现的。因此,必须可以创建对抽象类的引用,以便它可以用于指向子类对象。

你可以让它不是抽象的,或者创建一个在你的抽象类上调用 super() 的子类。

于 2012-08-30T14:10:55.010 回答
0

构造函数没有被调用,因为main()在没有实例化主类的情况下调用了方法。

要调用它 - 您需要Preethi显式创建一个对象。

UPD。正如 anio 建议的那样-您需要对其进行子类Preethi化和实例化。

于 2012-08-30T14:06:56.313 回答
0

您没有创建Preethi. 为了调用构造函数,您必须从类中删除抽象关键字并创建它的对象

或者创建匿名内部类,它的对象为:

new Preethi() {
   // abstract method impl
};

或者创建 Preethi 的子类,并创建它的对象。

仅供参考:您可以创建任何抽象类或接口的对象引用。您不能创建它们的对象。

而且我认为将主类抽象化真的没有任何意义。请告诉我。(如果我错了,请告诉我)

于 2012-08-30T14:08:46.960 回答
0

请看下面的代码:

public abstract class Preethi {

    // constructor:
    Preethi() {
        System.out.println("hirerew");
    }

    public static void main(String[] args) {
        // call the constructor:
        new Preethi() {};  // "{}" needed because our class is abstract.
    }

}

这里的重点是您不必总是创建一个新类,但可以在构造函数旁边定义一个“一次性”类。例如:

public abstract class A {
    public abstract void foo();
    public A() { foo(); }
}

您可以执行以下操作:

A a = new A() { 
    public void foo() { 
        System.out.println("hello"); 
    } 
};

输出只是“你好”。类似的方法也可以用于接口。

于 2012-08-30T14:08:51.320 回答