2012-03-04 4 views
2
abstract public class car 
{ 
    abstract void drive(); 
} 

위 코드 스 니펫과 마찬가지로 Java의 추상 메소드의 목적은 무엇입니까? 정의에 따르면 내가 수집 할 수있는 것부터 그들은 시체를 가질 수 없습니다.추상 메소드의 목적은 무엇입니까?

+0

죄송합니다 ... 내 투표 마감이 잘못되었습니다. –

답변

3

동일한 추상 클래스를 구현하게 만들면 이러한 것들은 모두 높은 수준에서 비슷하지만, 그들이하는 일의 세부 사항이 다릅니다. 추상적 인 방법은 "이 수업을 확장하는 모든 것들이해야 할 일이 있지만, 정확히 어떻게 할 것인가를 지정하는 것입니다."라고 말합니다.

0

인터페이스를 상속 한 비 추상 클래스를 강제로 인터페이스와 유사한 방식으로 구현합니다.

2

추상 메서드는이 abstract 클래스의 서브 클래스에서 구현되어야합니다. 예를 들어 클래스 이름은 Shape이고 draw() 메소드가 있습니다. Shape 클래스의 경우이 메서드를 구현할 수 없으므로 Shape을 그리는 방법을 모르기 때문에 abstract이됩니다. 그리고 Triangle 클래스를 만들 때 Shape 클래스를 만들 때 - Triangle을 그리는 방법은 확실하고 draw() 메서드를 구현할 수 있습니다. 희망이 도움이됩니다.

+0

그건 하나의 측면입니다. 또 다른 하나는 일반적으로 셰이프에 대한 지식을 갖는 것입니다. 예를 들어 Collection을 일종의 Collection에 넣는 경우를 예로들 수 있습니다. 현재 처리중인 Shape이 삼각형, 원 또는 다른 어떤 것이라도 "draw()"라는 메서드가 있습니다. 이것에 대한 이해를 높이는 한 가지 더 : 질문에서 추상 클래스는 차라기보다는 "차량"이라고 할 수 있습니다. 그리고 "자동차"는 구현 중 하나 일 수 있습니다. –

3

메서드 추상을 선언하면 구현이 제공되지 않지만 메서드에 구현을 제공하기 위해 car 클래스를 확장하는 구체적인 클래스가 필요하게됩니다. 예 :

abstract public class Car { 
    abstract void drive(); 
} 

public class Audi extends Car { 
    void drive() { 
     System.out.println("I'm an Audi."); 
    } 
} 

public class Volvo extends Car { 
    void drive() { 
     System.out.println("I'm a Volvo."); 
    } 
} 

구현을 제공하지 않으면 컴파일 오류가 발생합니다. 모두 AudiVolvo의 인스턴스가 런타임에 Car이 예상되는 경우, 서로 다른 행동을 막을 수있는 배치 할 수 있기 때문에 (이 다형성이라고합니다) 당신은 쉽게 그것을 볼 수있는이 예에서 이제

, :

void driveCar(Car car) { 
    car.drive(); 
} 

void testDrive() { 
    driveCar(new Audi()); // prints I'm an Audi 
    driveCar(new Volvo()); // prints I'm a Volvo 
} 
0

초록은 "drive"와 같이 나열된 모든 메소드를 구현해야하는 "모양"클래스로 작동하거나 프로그램 컴파일시 오류가 표시됩니다. 이러한 종류의 클래스는 인스턴스화 할 수 없으므로이 클래스를 상속하고 모든 추상 메서드를 구현해야합니다. 추상을 사용하는 장점은 추상 클래스를 모양 클래스로 사용할 수 있다는 것입니다.이 클래스는 메소드를 다시 작성하지 않고도 이미 클래스에 상속 할 수 있습니다. 이 메소드를 구현해야하기 때문에 구현과 재 작성을 혼동하지 마십시오. 예 : 당신은 동물 클래스가 : 당신이 상속하는 경우

abstract public class Animal{ 
    abstract void eat(); 
    abstract void walk(); 
} 

그래서, 자동으로이 메소드를 구현해야 할 것이다. 아래를 참조하십시오 :

public class Horse extends Animal{ 
     void eat() { //place the eating code } 
     void walk() { /// place the walking code } 
} 

희망을 이해하십시오!

관련 문제