2017-12-18 5 views
-1

저는 객체 지향 프로그래밍의 개념을 배우고 있습니다. 그 중 하나는 추상화입니다. 나는 추상적 인 메소드를 포함하는 어떤 클래스도 추상적이어야하고 추상 클래스는 인스턴스화 될 수 없다는 것을 이해한다. 추상 클래스를 사용하려면 다른 클래스에서 상속해야합니다.추상적 인 메서드와 클래스의 사용법이 명확하지 않습니다.

지금까지 그렇게 좋았습니다.

public abstract class Games { 

    public abstract void start(); 

    public void stop(){ 
     System.out.println("Stopping game in abstract class"); 
    } 
} 

class GameA extends Games{ 
    public void start(){ 
     System.out.println("Starting Game A"); 
    } 
} 

class GameB extends Games{ 

    public void start(){ 
     System.out.println("Starting Game B"); 
    } 
} 

그리고 우리가 main 방법으로 클래스가 있습니다 : 다음

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

: I 클래스 Games에 따라 적혀 있었다

public class AbstractExample { 

    public static void main(String[] args){ 
     Games A = new GameA(); 
     Games B = new GameB(); 

     A.start(); 
     A.stop(); 

     B.start(); 
     B.stop(); 
    } 
} 

그러나을의 다음 코드를 보자 abstract 일 필요는 없으며 출력도 동일하고 Games 클래스를 인스턴스화 할 수도 있습니다. 그렇다면 추상적 인 방법과 수업을 만드는 열쇠는 무엇입니까?

+1

소프트웨어 엔지니어링 스택에는 [좋은 설명이 있습니다 (https://softwareengineering.stackexchange.com/questions/96947/why-should-i-declare-a-class-as-an-abstract-class). . – azurefrog

+1

''게임 '을 구체적인 클래스로 만드는 이유를 생각할 수 있다면, 꼭 그 메소드를 구현하십시오. 추상화는 인스턴스를 갖는 것이 타당하지 않은 클래스를위한 것입니다. – jsheeran

+0

당신이 제안한 'start()'메소드가 그렇지 않다면, 그것을 추상적으로 표시 할 수 있는지 물어보십시오. 더미 구현을 제공하는 것이 타당하지 않을 때, 클래스 **는 그것을 구현해야합니다 **. –

답변

1

오른쪽 의미에서 추상 클래스/인터페이스는 계약서를 직접 구현해야하는 계약입니다. 예를 들어 파일, 데이터베이스 등에 기록 할 수있는 로깅 라이브러리를 작성하고 있습니다. 기본 I/O를 유지할 수있는 기능을 구현하는 방법은 무엇입니까? 이를 달성하기 위해 인터페이스/추상 클래스의 인스턴스로 작업하도록 코드를 작성하십시오. 이제이 두 가지의 차이점은 구현이없는 인터페이스만큼이나 간단합니다. 글쎄, 자바 8까지,하지만 신경 쓰지 마라. 그것은 ATM에 대해 걱정할 것이 아니다. 추상 클래스는 특정 메소드를 구현할 수 있습니다. 쓰기 시도가 성공하지 못한 경우 재 시도하십시오. 그러나 실제 쓰기 작업은 구현 작업에만 존재합니다. 인터페이스는 할 수 없습니다.

0

추상 클래스는 단일 프로그래머 프로젝트에서별로 의미가 없습니다. 여러분은 그것들을 그 클래스로부터 상속받은 프로그래머가 획득 한 약속으로 볼 수 있습니다.

+0

하나의 프로그래머 프로젝트에서도 추상 클래스는 의미가 있습니다. 이들은 행동 템플릿으로, 구현 하위 클래스가 '공백을 채 웁니다'. –

+0

왜 그걸 너 자신에게 맡기 겠어? :) – Andres

+0

왜 안 되니? 그것은 더 어렵게 만들지 않으며 몇 년 후에 코드 달을 다시 방문 할 때 도움이 될 수있는 자체 문서 형식을 제공합니다. –

관련 문제