2012-08-30 2 views
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"); 
} 

} 
+0

당신은이 클래스의 인스턴스를 만들지 않습니다. 추상적이라고 알고 있지만, 여전히 sth은 상속받을 수 있습니다. 그런 다음 super를 호출하여 생성자를 호출합니다. – gregory561

답변

1

추상 클래스 Preethi의 인스턴스를 생성하지 마십시오. 왜 생성자가 호출되기를 기대합니까? 비 추상적 인 서브 클래스를 만들고 그 인스턴스를 생성하면 생성자가 호출됩니다. main은 정적이다. Preethi가 실현되지 않고 호출 될 수있다. 주에서 그런

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

은 : main() 방법은 메인 클래스의 인스턴스없이 호출되기 때문에

public static void main(String [] args) 
{ 
    Preethi preethi = new X(); // This will call the constructor of Preethi 
} 
0

생성자가 호출되지 않습니다.

호출하려면 명시 적으로 Preethi의 개체를 만들어야합니다.

UPD. anio가 제안한 것처럼 - 서브 클래스 Preethi에 인스턴스화해야합니다.

0

Preethi의 개체를 만들지 않습니다.

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

또는 Preethi의 하위 클래스를 생성하고, 생성 : 생성자에 전화를 만들기 위해, 당신은 클래스에서 추상적 인 키워드를 제거하고 그것의 개체

을 만들거나 익명 내부 클래스와 그것의 개체를 만들어야합니다 그것의 목적.

FYI : 모든 추상 클래스의 인터페이스 참조를 만들 수 있습니다. 개체를 만들 수는 없습니다.

그리고 나는 메인 클래스 추상을 만드는 것이 실제로 말이되지 않는다고 생각합니다. 나에게 Atlease (만약 내가 잘못 말해)

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"); 
    } 
}; 

출력은 간단하게 "안녕하세요"가 될 것입니다. 비슷한 방법을 인터페이스에도 사용할 수 있습니다.

0

추상적 인 클래스는 객체를 인스턴스화하는 데 사용할 수 없지만 Java의 런타임 다형성에 대한 접근 방식은 수퍼 클래스 참조를 사용하여 구현되므로 객체 참조를 만드는 데 사용할 수 있습니다. 따라서 추상 클래스에 대한 참조를 작성하여 POINT TO A SUBCLASS 오브젝트에 사용할 수 있어야합니다.

추상화하지 않거나 추상 클래스에서 super()를 호출하는 하위 클래스를 만들 수 있습니다.

관련 문제