programing

추상 메서드없이 추상 클래스 정의

nasanasas 2020. 8. 16. 20:45
반응형

추상 메서드없이 추상 클래스 정의


추상 메서드를 추가하지 않고 추상 클래스를 정의 할 수 있습니까?


물론이야.

클래스 초록을 선언한다는 것은 자체적으로 인스턴스화되는 것을 허용하지 않는다는 의미 일뿐입니다.

메서드 추상을 선언한다는 것은 하위 클래스가 해당 메서드에 대한 구현을 제공해야 함을 의미합니다.

두 가지 개념은 별개이지만, 비추 상 클래스에서는 추상 메서드를 가질 수 없습니다. final메서드 가있는 추상 클래스를 가질 수도 있지만 그 반대는 아닙니다.


예, 할 수 있습니다. 그냥 해보지 그래?


그래 넌 할수있어. 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);
    }
}

이건 괜찮아.


YES 추상 메서드없이 추상 클래스를 생성 할 수 있습니다. 추상 메서드가없는 추상 클래스의 가장 좋은 예는 HttpServlet입니다.
추상 메서드는 본문이없는 메서드입니다. 클래스에 적어도 하나의 메서드를 선언 한 경우 클래스는 다음과 같이 선언되어야합니다. 추상 클래스를 선언 한 경우 필수를 추상화하지만 클래스 내부에서 추상 메서드를 선언하는 것은 필수가 아닙니다.

추상 클래스의 개체를 만들 수 없습니다. 즉, 인스턴스화 할 수 없습니다.


예, 이미 구현 된 메서드만으로 자체적으로 인스턴스화 할 수없는 클래스를 선언 할 수 있습니다. 이것은 나중에 추상 메서드를 추가하거나 추상 속성이없는 경우에도 클래스를 직접 인스턴스화하지 않으려는 경우에 유용합니다.


예, 둘 다 독립적 인 개념이기 때문에 추상 메서드없이 추상 클래스를 가질 수 있습니다. 클래스 추상을 선언한다는 것은 자체적으로 인스턴스화 할 수 없으며 하위 클래스 만 가능함을 의미합니다. 메서드 추상을 선언한다는 것은 Method가 하위 클래스에 정의된다는 것을 의미합니다.


예, 추상 메서드없이 추상 클래스를 선언 할 수 있습니다. 클래스를 추상으로 선언하는 목적은 클래스를 인스턴스화하는 것이 아닙니다.

그래서 두 가지 경우

1) 추상 메서드가있는 추상 클래스.

이러한 유형의 클래스에서는이 추상 클래스에서 클래스를 상속해야하며 클래스의 추상 메서드를 재정의해야합니다 (예 : GenricServlet 클래스).

2) 추상 메서드가없는 추상 클래스.

이러한 유형의 클래스는이 추상 클래스에서 클래스를 상속해야합니다. 예 : HttpServlet 클래스의 목적은 자식 클래스에서 논리를 구현하지 않으면 부모 논리를 얻을 수 있다는 것입니다.

HttpServlet 소스 코드를 확인하십시오


네, 할 수 있습니다.

클래스 추상을 선언한다는 것은 클래스가 다른 클래스에 의해 인스턴스화되지 않음을 의미합니다.

그리고 그 안에 적어도 하나의 추상 메서드가 있어야하며 그 의미는 ok보다 메서드를 선언하지 않으면 해당 클래스에서 추상 메서드를 선언 할 수 있습니다.

예:

public abstract class abs {

    protected int cx = 0, cy = 0;

    public void p() {
        System.out.print("hello");
    }
}

이것은 확실히 작동합니다.


예, 추상 메서드없이 추상 클래스를 정의 할 수 있습니다. 그러나 내부에 메소드가 없으면 인터페이스를 사용하는 것이 좋습니다.


Yes you can. Sometimes you may get asked this question that what is the purpose doing this? The answer is: sometimes we have to restrict the class from instantiating by its own. In that case, we want user to extend our Abstract class and instantiate child class


You can, the question in my mind is more should you. Right from the beginning, I'll say that there is no hard and fast answer. Do the right thing for your current situation.

To me inheritance implies an 'is-a' relationship. Imagine a dog class, which can be extended by more specialized sub types (Alsatian, Poodle, etc). In this case making the dog class abstract may be the right thing to do since sub-types are dogs. Now let's imagine that dogs need a collar. In this case inheritance doesn't make sense: it's nonsense to have a 'is-a' relationship between dogs and collars. This is definitely a 'has-a' relationship, collar is a collaborating object. Making collar abstract just so that dogs can have one doesn't make sense.

I often find that abstract classes with no abstract methods are really expressing a 'has-a' relationship. In these cases I usually find that the code can be better factored without using inheritance. I also find that abstract classes with no abstract method are often a code smell and at the very least should lead to questions being raised in a code review.

Again, this is entirely subjective. There may well be situations when an abstract class with no abstract methods makes sense, it's entirely up to interpretation and justification. Make the best decision for whatever you're working on.

참고URL : https://stackoverflow.com/questions/4811678/defining-an-abstract-class-without-any-abstract-methods

반응형