답변:
예, 할 수 있습니다. 그냥 해보지 그래?
그래 넌 할수있어. Java에서 사용되는 추상 클래스는 클래스의 객체를 만들 수 없음을 나타냅니다. 그리고 서브 클래스가 해당 메서드에 대한 구현을 제공해야하는 추상 메서드입니다.
따라서 추상 메서드없이 쉽게 추상 클래스를 정의 할 수 있습니다.
예 :
public abstract class AbstractClass{
public String nonAbstractMethodOne(String param1,String param2){
String param = param1 + param2;
return param;
}
public static void nonAbstractMethodTwo(String param){
System.out.println("Value of param is "+param);
}
}
이건 괜찮아.
예, 이미 구현 된 메서드만으로 자체적으로 인스턴스화 할 수없는 클래스를 선언 할 수 있습니다. 이것은 나중에 추상 메서드를 추가하거나 추상 속성이없는 경우에도 클래스를 직접 인스턴스화하지 않으려는 경우에 유용합니다.
예, 추상 메서드없이 추상 클래스를 선언 할 수 있습니다. 클래스를 추상으로 선언하는 목적은 클래스를 인스턴스화하는 것이 아닙니다.
그래서 두 가지 경우
1) 추상 메서드가있는 추상 클래스.
이러한 유형의 클래스에서는이 추상 클래스에서 클래스를 상속해야하며 클래스의 추상 메서드를 재정의해야합니다 (예 : GenricServlet 클래스).
2) 추상 메서드가없는 추상 클래스.
이러한 유형의 클래스는이 추상 클래스에서 클래스를 상속해야합니다. 예 : HttpServlet 클래스의 목적은 자식 클래스에서 논리를 구현하지 않으면 부모 논리를 얻을 수 있다는 것입니다.
그래 넌 할수있어. 때때로 당신은 이것을하는 목적이 무엇인지에 대한 질문을받을 수 있습니다. 대답은 : 때때로 우리는 클래스가 자체적으로 인스턴스화하지 못하도록 제한해야합니다. 이 경우 사용자가 Abstract 클래스를 확장하고 자식 클래스를 인스턴스화하기를 원합니다.
예, 추상 메서드없이 추상 클래스를 정의 할 수 있습니다. 그러나 내부에 메소드가 없으면 인터페이스를 사용하는 것이 좋습니다.
당신은 할 수 있습니다. 처음부터 딱딱하고 빠른 대답은 없다고 말 할게요. 현재 상황에 맞는 일을하십시오.
나에게 상속은 'is-a'관계를 의미합니다. 좀 더 전문화 된 하위 유형 (Alsatian, Poodle 등)으로 확장 할 수있는 개 클래스를 상상해보십시오. 이 경우 개 클래스를 추상적으로 만드는 것은 하위 유형이 개이기 때문에 옳은 일이 될 수 있습니다. 이제 개에게 목걸이가 필요하다고 상상해 봅시다. 이 경우 상속은 의미가 없습니다. 개와 목걸이 사이에 'is-a'관계를 갖는 것은 말도 안됩니다. 이것은 확실히 '가져온'관계이고, 칼라는 협업 대상입니다. 개가 하나를 가질 수 있도록 칼라를 추상화하는 것은 말이되지 않습니다.
나는 종종 추상 메서드가없는 추상 클래스가 실제로 'has-a'관계를 표현하고 있음을 발견합니다. 이 경우 상속을 사용하지 않고도 코드를 더 잘 분석 할 수 있다는 것을 알 수 있습니다. 또한 추상 메서드가없는 추상 클래스는 종종 코드 냄새이며 최소한 코드 리뷰에서 질문을 제기해야합니다.
다시 말하지만 이것은 전적으로 주관적입니다. 추상 메서드가없는 추상 클래스가 의미가있는 상황이있을 수 있습니다. 그것은 전적으로 해석과 정당화에 달려 있습니다. 어떤 작업을하든 최선의 결정을 내리십시오.
WindowDecorator
하고CoffeeDecorator
있는abstract
클래스는, 그러나 어느 쪽도 포함하지 않는abstract
방법.