문제

추상 기능과 가상 기능의 차이점은 무엇입니까? 어떤 경우에는 가상 또는 초록을 사용하는 것이 권장됩니까? 어느 것이 가장 좋은 접근법입니까?

도움이 되었습니까?

해결책

추상 기능은 기능을 가질 수 없습니다. 당신은 기본적으로, 모든 어린이 수업은이 방법의 자체 버전을 제공해야하지만, 부모 수업에서 구현하기에는 너무 일반적입니다.

가상 기능, 기본적으로 외관을 말하고 있습니다. 여기에 어린이 수업에 충분하거나 충분하지 않을 수있는 기능이 있습니다. 따라서 충분하다면이 방법을 사용하십시오. 그렇지 않은 경우 저를 무시하고 자신의 기능을 제공하십시오.

다른 팁

추상 기능에는 구현이 없으며 추상 클래스에서만 선언 할 수 있습니다. 이것은 파생 클래스가 구현을 제공하도록 강요합니다.

가상 함수는 기본 구현을 제공하며 추상 클래스 또는 비 임계 클래스에 존재할 수 있습니다.

예를 들어 :

public abstract class myBase
{
    //If you derive from this class you must implement this method. notice we have no method body here either
    public abstract void YouMustImplement();

    //If you derive from this class you can change the behavior but are not required to
    public virtual void YouCanOverride()
    { 
    }
}

public class MyBase
{
   //This will not compile because you cannot have an abstract method in a non-abstract class
    public abstract void YouMustImplement();
}
  1. abstract 수업은 가질 수 있습니다 abstract 회원.
  2. abstract an에서 물려받은 클래스 abstract 수업 ~ 해야 하다 override 그것의 abstract 회원.
  3. an abstract 멤버는 암시 적입니다 virtual.
  4. an abstract 회원은 구현을 제공 할 수 없습니다 (abstract 호출됩니다 pure virtual 일부 언어로).

항상 추상 기능을 무시해야합니다.

따라서:

  • 추상 기능 - 언제 상속자는 자체 구현을 제공해야합니다
  • 가상 - 언제 결정하는 것은 상속자에게 달려 있습니다

추상 기능 :

  1. 초록 클래스 내에서만 선언 할 수 있습니다.
  2. 초록 클래스의 구현이 아닌 메소드 선언 만 포함됩니다.
  3. 파생 클래스에서 무시해야합니다.

가상 기능 :

  1. 비 초록 클래스뿐만 아니라 초록 내부에서 선언 할 수 있습니다.
  2. 메소드 구현이 포함되어 있습니다.
  3. 재정의 될 수 있습니다.

초록 방법 : 수업에 추상 방법이 포함 된 경우 해당 클래스는 추상적으로 선언되어야합니다. 추상 방법에는 구현이 없으므로 해당 추상 클래스에서 파생되는 클래스는이 추상적 인 방법에 대한 구현을 제공해야합니다.

가상 방법 : 클래스에는 가상 메소드가있을 수 있습니다. 가상 방법에는 구현이 있습니다. 가상 방법이있는 클래스에서 상속하면 ~할 수 있다 가상 방법을 무시하고 추가 로직을 제공하거나 논리를 자신의 구현으로 바꾸십시오.

사용시 : 경우에 따라 특정 유형에 특정 방법이 있어야한다는 것을 알고 있지만,이 방법이 어떤 구현을 해야하는지 알지 못합니다.
이 경우이 서명에 메소드가 포함 된 인터페이스를 만들 수 있습니다. 그러나 그러한 경우가 있지만 해당 인터페이스의 구현자가 또 다른 공통 방법 (이미 구현을 제공 할 수 있음)이 있다는 것을 알고 있습니다. 초록 클래스를 만들 수 있습니다. 그런 다음이 추상 클래스에는 추상 방법 (재정의해야 함)과 '공통'논리가 포함 된 다른 방법이 포함되어 있습니다.

직접 사용할 수있는 클래스가 있지만 상속자가 필수 행동은 아니지만 특정 동작을 변경할 수있는 클래스가있는 경우 가상 방법을 사용해야합니다.

설명 : 비유. 잘만되면 그것은 당신을 도울 것입니다.

문맥

나는 건물의 21 세기 층에서 일합니다. 그리고 나는 불에 대해 편집증입니다. 전 세계 어딘가에, 불이 하늘 스크레이퍼를 태우고 있습니다. 그러나 운 좋게도 우리는 불의 경우해야 할 일에 대한 어딘가에 지침 매뉴얼이 있습니다.

비상 계단()

  1. 소지품을 수집하지 마십시오
  2. 화재 탈출로 걸어 가십시오
  3. 건물 밖으로 나가십시오

이것은 기본적으로 가상 방법입니다 비상 계단()

가상 방법

이 계획은 상황의 99%에 꽤 좋습니다. 작동하는 기본 계획입니다. 그러나 화재 탈출이 차단되거나 손상 될 가능성이 1%이며,이 경우 완전히 망쳐 놓고 과감한 조치를 취하지 않으면 토스트가 될 것입니다. 가상 메소드를 사용하면 다음을 수행 할 수 있습니다. 자신의 계획 버전으로 기본 FireScape () 계획을 무시할 수 있습니다.

  1. 창으로 달려갑니다
  2. 창문 밖으로 뛰어 내리십시오
  3. 바닥에 안전하게 낙하산

다시 말해 가상 방법은 기본 계획을 제공하며, 필요한 경우 재정의 할 수 있습니다.. 프로그래머가 적절하다고 간주하면 서브 클래스가 상위 클래스의 가상 메소드를 무시할 수 있습니다.

추상 방법

모든 조직이 잘 시추되는 것은 아닙니다. 일부 조직은 화재 훈련을하지 않습니다. 그들은 전반적인 탈출 정책이 없습니다. 모든 사람은 자신을위한 것입니다. 경영진은 그러한 정책에만 관심이 있습니다.

다시 말해, 각 사람은입니다 강요된 자신의 FireScape () 방법을 개발합니다. 한 남자가 화재 탈출구를 떠날 것입니다. 다른 사람이 낙하산을 뿌릴 것입니다. 다른 사람은 로켓 추진 기술을 사용하여 건물에서 멀어 질 것입니다. 다른 사람이 아세이 나 밖으로 나올 것입니다. 경영진은 상관하지 않습니다 어떻게 기본적인 FireScape () 계획이있는 한 탈출 - 그렇지 않으면 OHS가 조직에 양의 벽돌처럼 내려올 것이라고 보장 할 수 있습니다. 이것이 추상적 인 방법의 의미입니다.

다시 두 사람의 차이점은 무엇입니까?

초록 방법 : 하위 클래스는 다음과 같습니다 강요된 자신의 FireScape 방법을 구현합니다. 가상 방법을 사용하면 기본 계획이 기다리고 있지만 선택할 수 있습니다. 나만의 구현 충분하지 않다면.

이제 그렇게 어렵지 않았습니까?

추상 방법은 구체적인 클래스를 만들기 위해 구현 해야하는 방법입니다. 선언은 추상 클래스에 있으며 (추상 방법을 가진 모든 클래스는 추상 클래스 여야합니다) 구체적인 클래스에서 구현해야합니다.

가상 메소드는 The Override를 사용하여 파생 클래스에서 재정의 할 수있는 메소드입니다. 교체 슈퍼 클래스의 동작. 무시하지 않으면 원래 동작이됩니다. 그렇게한다면 항상 새로운 행동을 얻습니다. 이는 가상 방법이 아닌 반대에 반대하여 재정의 할 수는 없지만 원래 방법을 숨길 수 있습니다. 이것은 그것을 사용하여 수행됩니다 new 수정 자.

다음 예를 참조하십시오.

public class BaseClass
{
    public void SayHello()
    {
        Console.WriteLine("Hello");
    }


    public virtual void SayGoodbye()
    {
        Console.WriteLine("Goodbye");
    }

    public void HelloGoodbye()
    {
        this.SayHello();
        this.SayGoodbye();
    }
}


public class DerivedClass : BaseClass
{
    public new void SayHello()
    {
        Console.WriteLine("Hi There");
    }


    public override void SayGoodbye()
    {
        Console.WriteLine("See you later");
    }
}

내가 인스턴스화 할 때 DerivedClass 그리고 전화 SayHello, 또는 SayGoodbye, 나는 "안녕하세요"와 "나중에 뵙겠습니다"를 얻습니다. 내가 전화하면 HelloGoodbye, 나는 "안녕하세요"와 "나중에 뵙겠습니다"를 얻습니다. 이 때문입니다 SayGoodbye 가상이며 파생 클래스로 대체 할 수 있습니다. SayHello 만 숨겨져 있으므로 기본 클래스에서 호출 할 때 원래 방법을 얻습니다.

초록 방법은 암시 적으로 가상입니다. 그들은 인터페이스처럼 존재 해야하는 행동을 정의합니다.

초록 방법은 항상 가상입니다. 그들은 구현을 가질 수 없습니다.

그것이 주요 차이점입니다.

기본적으로 '기본값'구현이있는 경우 가상 메소드를 사용하고 후손이 동작을 변경할 수있게하려면 가상 메소드를 사용합니다.

추상적 인 방법으로, 당신은 후손들에게 구현을 제공하도록 강요합니다.

다음 수업을 개선하여 (다른 답변에서) 이것을 더 간단하게 만들었습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestOO
{
    class Program
    {
        static void Main(string[] args)
        {
            BaseClass _base = new BaseClass();
            Console.WriteLine("Calling virtual method directly");
            _base.SayHello();
            Console.WriteLine("Calling single method directly");
            _base.SayGoodbye();

            DerivedClass _derived = new DerivedClass();
            Console.WriteLine("Calling new method from derived class");
            _derived.SayHello();
            Console.WriteLine("Calling overrided method from derived class");
            _derived.SayGoodbye();

            DerivedClass2 _derived2 = new DerivedClass2();
            Console.WriteLine("Calling new method from derived2 class");
            _derived2.SayHello();
            Console.WriteLine("Calling overrided method from derived2 class");
            _derived2.SayGoodbye();
            Console.ReadLine();
        }
    }


    public class BaseClass
    {
        public void SayHello()
        {
            Console.WriteLine("Hello\n");
        }
        public virtual void SayGoodbye()
        {
            Console.WriteLine("Goodbye\n");
        }

        public void HelloGoodbye()
        {
            this.SayHello();
            this.SayGoodbye();
        }
    }


    public abstract class AbstractClass
    {
        public void SayHello()
        {
            Console.WriteLine("Hello\n");
        }


        //public virtual void SayGoodbye()
        //{
        //    Console.WriteLine("Goodbye\n");
        //}
        public abstract void SayGoodbye();
    }


    public class DerivedClass : BaseClass
    {
        public new void SayHello()
        {
            Console.WriteLine("Hi There");
        }

        public override void SayGoodbye()
        {
            Console.WriteLine("See you later");
        }
    }

    public class DerivedClass2 : AbstractClass
    {
        public new void SayHello()
        {
            Console.WriteLine("Hi There");
        }
        // We should use the override keyword with abstract types
        //public new void SayGoodbye()
        //{
        //    Console.WriteLine("See you later2");
        //}
        public override void SayGoodbye()
        {
            Console.WriteLine("See you later");
        }
    }
}

제본 이름을 코드 단위에 매핑하는 프로세스입니다.

늦은 바인딩 우리는 이름을 사용하지만 매핑을 연기한다는 것을 의미합니다. 다시 말해, 먼저 이름을 작성/언급하고 일부 후속 프로세스에서 코드의 매핑을 해당 이름으로 처리합니다.

이제 고려 :

  • 인간과 비교하여 기계는 검색 및 정렬에 정말 좋습니다.
  • 기계에 비해 인간은 발명과 혁신에 정말 능숙합니다.

따라서 짧은 대답은 다음과 같습니다. virtual 기계 (런타임)에 대한 늦은 바인딩 지침이지만 abstract 인간을위한 후기 바인딩 지시 (프로그래머)

다시 말해, virtual 수단:

"에게 실행 시간, 최선을 다하면 적절한 코드를이 이름에 바인딩하십시오. 수색

반면 abstract 수단:

"에게 프로그램 제작자, 최선을 다하면 적절한 코드를이 이름에 바인딩하십시오. 발명

완전성을 위해 과부하 수단:

"에게 컴파일러, 최선을 다하면 적절한 코드를이 이름에 바인딩하십시오. 정렬”.

상속자가 원하는 경우 기능을 확장하기를 원할 때 기본적으로 가상 메소드를 사용합니다.

상속자가 기능을 구현하기를 원할 때 추상 방법을 사용합니다 (이 경우에는 선택의 여지가 없습니다).

일부 장소에서 추상 방법은 아래와 같이 정의되어 있습니다. **

"추상적 인 방법은 어린이 수업에서 구현해야합니다"

** 나는 그것이 같다고 느꼈다.

아동 수업에서 추상적 인 방법을 구현할 필요는 없습니다. 아동 수업이 추상적 인 경우 ..

1) 추상 방법 캔트 개인 방법이 되십시오. 2) 추상 방법 캔트 동일한 추상 클래스에서 구현됩니다.

나는 우리가 추상 클래스를 구현하는 경우, 당신은 기본 추상 클래스에서 추상 방법을 무시해야합니다. 왜냐하면 .. 추상 방법을 구현하는 것은 다음과 같습니다 우세하다 핵심 단어. 가상 메소드와 유사합니다.

상속 클래스에서 가상 방법을 구현할 필요는 없습니다.

                                 ----------CODE--------------

public abstract class BaseClass
{
    public int MyProperty { get; set; }
    protected abstract void MyAbstractMethod();

    public virtual void MyVirtualMethod()
    {
        var x = 3 + 4;
    }

}
public abstract class myClassA : BaseClass
{
    public int MyProperty { get; set; }
    //not necessary to implement an abstract method if the child class is also abstract.

    protected override void MyAbstractMethod()
    {
        throw new NotImplementedException();
    }
}
public class myClassB : BaseClass
{
    public int MyProperty { get; set; }
    //You must have to implement the abstract method since this class is not an abstract class.

    protected override void MyAbstractMethod()
    {
        throw new NotImplementedException();
    }
}

가상 방법:

  • 가상은 우리가 그것을 무시할 수 있음을 의미합니다.

  • 가상 기능에는 구현이 있습니다. 수업을 상속하면 가상 기능을 무시하고 우리 자신의 논리를 제공 할 수 있습니다.

  • 구현하는 동안 가상 기능의 반환 유형을 변경할 수 있습니다.
    아동 계급에서의 기능 (개념으로 말할 수 있습니다.
    그림자).

추상 방법

  • 초록은 우리가 그것을 무시해야한다는 것을 의미합니다.

  • 추상 기능에는 구현이 없으며 추상 클래스에 있어야합니다.

  • 그것은 단지 선언 될 수 있습니다. 이것은 파생 클래스가 IT의 구현을 제공하도록 강요합니다.

  • 추상 회원은 암시 적으로 가상입니다. 초록은 일부 언어에서 순수한 가상으로 불릴 수 있습니다.

    public abstract class BaseClass
    { 
        protected abstract void xAbstractMethod();
    
        public virtual void xVirtualMethod()
        {
            var x = 3 + 4;
        }
    } 
    

추상 기능 신체를 가질 수없고 아동 수업에 의해 무시되어야합니다.

가상 기능 신체가 있고 아동 수업에 의해 상인되거나 무시되지 않을 수도 있습니다.

위의 예의 대부분은 코드를 사용하며 매우 좋습니다. 나는 그들이 말하는 것을 추가 할 필요는 없지만 다음은 코드/기술 용어보다는 유사성을 사용하는 간단한 설명입니다.

간단한 설명 - 유사성을 사용한 설명

추상 방법

George W Bush를 생각하십시오. 그는 병사들에게 "이라크에서 싸우십시오"라고 말합니다. 그리고 그게 다야. 그가 명시한 것은 싸움이 이루어져야한다는 것입니다. 그는 지정하지 않습니다 어떻게 정확히 일어날 것입니다. 하지만 내 말은, 당신은 나가서 "싸움"을 할 수는 없습니다. 정확히 무엇을 의미합니까? B-52 또는 Derringer와 싸우나요? 이러한 구체적인 세부 사항은 다른 사람에게 맡겨집니다. 이것은 추상적 인 방법입니다.

가상 방법

David Petraeus는 군대에서 높습니다. 그는 싸움이 무엇을 의미하는지 정의했습니다.

  1. 적을 찾으십시오
  2. 그를 중화하십시오.
  3. 나중에 맥주를 마시십시오

문제는 그것이 매우 일반적인 방법이라는 것입니다. 효과가있는 좋은 방법이지만 때로는 충분히 구체적이지 않습니다. Petraeus에게 좋은 점은 그의 명령에 여유와 범위가 있다는 것입니다. 그는 특정 요구 사항에 따라 다른 사람들이 "싸움"에 대한 정의를 바꿀 수있었습니다.

Private Job Bloggs는 Petraeus의 주문을 읽고 그의 특정 요구 사항에 따라 자신의 Fight 버전을 구현할 수있는 권한을 부여합니다.

  1. 적을 찾으십시오.
  2. 그를 머리에 쏴라.
  3. 집에가
  4. 맥주가 있습니다.

Nouri Al Maliki는 또한 Petraeus로부터 동일한 명령을받습니다. 그는 또한 싸워야한다. 그러나 그는 보병대가 아닌 정치인입니다. 분명히 그는 정치인의 적을 머리에 쏘지 않을 수 없습니다. Petraeus는 그에게 가상 방법을 제공했기 때문에 Maliki는 자신의 특정 상황에 따라 자신의 전투 방법을 구현할 수 있습니다.

  1. 적을 찾으십시오.
  2. 그는 BS가 혐의로 체포되었다.
  3. 집에가
  4. 맥주가 있습니다.

다시 말해, 가상 방법은 보일러 플레이트 지침을 제공하지만 일반적인 지침은 특정 상황에 따라 군대 상속인의 사람들이보다 구체적으로 만들 수있는 일반적인 지침입니다.

둘의 차이

  • George Bush는 구현 세부 정보를 증명하지 않습니다. 이것은 다른 사람이 제공해야합니다. 이것은 추상적 인 방법입니다.

  • 반면에 페트라 하다 구현 세부 정보를 제공하지만 더 나은 것을 생각해 낼 수 있다면 부하 직원이 자신의 버전으로 자신의 주문을 무시할 수있는 권한을 부여했습니다.

도움이되기를 바랍니다.

추상 기능 (방법) :

● 추상 방법은 키워드 초록으로 선언 된 메소드입니다.

● 신체가 없습니다.

● 파생 클래스에서 구현해야합니다.

● 메소드가 추상적 인 경우 클래스는 추상화해야합니다.

가상 함수 (메소드) :

● 가상 메소드는 키워드 가상으로 선언 된 메소드이며 Oredide Keyword를 사용하여 파생 클래스 메소드에 의해 재정의 될 수 있습니다.

● 파생 클래스에 달려 있습니다.

답은 여러 번 제공되었지만 각시기시기에 대한 질문은 설계 시간 결정입니다. 공통 메소드 정의를 별개의 인터페이스에 묶고 적절한 추상화 수준에서 클래스로 끌어 당기는 것이 좋습니다. 일반적인 추상 및 가상 메소드 정의 세트를 클래스에 덤프하면 간결한 인터페이스 세트를 구현하는 비 임계 클래스를 정의하는 것이 가장 좋을 때 클래스를 허용 할 수 없습니다. 항상 그렇듯이 응용 프로그램의 특정 요구에 가장 적합한 것이 무엇인지에 따라 다릅니다.

일반적인 객체 지향보기에서 :

추상 방법에 관해: 부모 수업에 추상적 인 방법을 넣을 때 실제로 당신은 어린이 수업에 말하고 있습니다. 이와 같은 메소드 서명이 있습니다. 그리고 당신이 그것을 사용하고 싶다면 당신은 당신 자신의 것을 구현해야합니다!

가상 기능과 관련하여: 부모 클래스에 가상 메소드를 넣을 때 파생 클래스에 말하는 것 : 여기에는 당신을 위해 무언가를하는 기능이 있습니다. 이것이 유용하다면 사용하십시오. 그렇지 않은 경우,이를 재정의하고 코드를 구현하면 코드에서 내 구현을 사용할 수 있습니다!

이것은 일반적 으로이 두 개념 사이의 다른 철학입니다.

C#에는 호출 가상 클래스가 없습니다.

기능을 위해

  1. 초록 함수에는 서명만이 있으며 드라이브 클래스는 기능을 무시해야합니다.
  2. 가상 함수는 드라이브 클래스가 요구 사항에 따라이를 재정의하거나 무시할 수있는 기능의 일부를 유지합니다.

요구 사항으로 결정할 수 있습니다.

초록 방법에는 구현이 없으며 상위 클래스에서 선언됩니다. 아동 수업은 해당 방법을 구현할 수 있습니다.

가상 방법은 부모 클래스에서 구현해야하며 아동 클래스를 촉진하여 부모 클래스의 구현을 사용해야하는지 또는 아동 클래스에서 해당 방법을위한 새로운 구현을 선택할 것인지 선택합니다.

추상 기능은 구현이없는 "단지"서명입니다. 인터페이스에서 클래스를 사용할 수있는 방법을 선언하는 데 사용됩니다. 파생 클래스 중 하나에서 구현해야합니다.

가상 함수 (실제로 메소드)는 당신이 선언하는 함수이며 상속 계층 클래스 중 하나에서 구현해야합니다.

해당 클래스의 상속 된 사례는 구현을 구현하지 않는 한 하위 계층 클래스에서 구현을 상속합니다.

C ++ 배경에서 C# virtual은 C ++ 가상에 해당하는 반면 C# Abstract 메소드는 C ++ Pure Virtual Function에 해당합니다.

추상 기능 또는 방법 클래스에 의해 노출 된 공개 "운영 이름"이며, 초록 클래스와 함께 목표는 주로 객체가 구현 해야하는 구조에 대한 객체 설계의 제약 조건을 제공합니다.

실제로 추상 클래스에서 상속되는 클래스는이 방법에 구현해야하며, 일반적으로 컴파일러는 그렇지 않을 때 오류를 일으 킵니다.

추상 클래스와 방법을 사용하는 것은 주로 클래스를 설계 할 때 구현 세부 사항에 초점을 맞추는 것을 피하기 위해 주로 중요합니다. 클래스 구조는 구현과 너무 관련되어 있으므로 그 중 공동 작업하는 클래스 간의 종속성과 커플 링을 생성합니다.

가상 함수 또는 방법 단순히 수업의 공개 행동을 모델링하는 방법이지만, 우리는 아동 수업이 해당 행동에 대한 특정 확장을 구현해야 할 수 있다고 생각하기 때문에 상속 체인에서 자유롭게 수정할 수있는 방법입니다.

그들은 둘 다의 형태를 나타냅니다 polymorpfhism 객체 방향 패러다임에서.

우리는 추상 방법과 가상 기능을 함께 사용하여 좋은 상속 모델을 지원할 수 있습니다.

우리는 솔루션의 주요 객체의 좋은 추상 구조를 설계 한 다음 더 많은 전문화에 취약하기 쉬운 사람들을 찾아 기본 구현을 만듭니다. 그리고 우리는 이러한 것들을 가상으로 만듭니다. 마지막으로 기본 구현을 전문화하고, 상속 된 가상을 "재정의"우선적 인 가상을 전문으로합니다.

여기에 나는 이것이 매우 기본적인 수준에서 인터페이스, 추상 클래스 및 일반 클래스의 동작을 볼 수있는 다소 실질적인 예일 수있는 샘플 코드를 작성하고 있습니다. 데모로 사용하려면이 코드 에서이 코드를 프로젝트로 찾을 수 있습니다. https://github.com/usavas/javaabstractandinterfacedemo

public interface ExampleInterface {

//    public void MethodBodyInInterfaceNotPossible(){
//    }
    void MethodInInterface();

}

public abstract class AbstractClass {
    public abstract void AbstractMethod();

    //    public abstract void AbstractMethodWithBodyNotPossible(){
    //
    //    };

    //Standard Method CAN be declared in AbstractClass
    public void StandardMethod(){
        System.out.println("Standard Method in AbstractClass (super) runs");
    }
}

public class ConcreteClass
    extends AbstractClass
    implements ExampleInterface{

    //Abstract Method HAS TO be IMPLEMENTED in child class. Implemented by ConcreteClass
    @Override
    public void AbstractMethod() {
        System.out.println("AbstractMethod overridden runs");
    }

    //Standard Method CAN be OVERRIDDEN.
    @Override
    public void StandardMethod() {
        super.StandardMethod();
        System.out.println("StandardMethod overridden in ConcreteClass runs");
    }

    public void ConcreteMethod(){
        System.out.println("Concrete method runs");
    }

    //A method in interface HAS TO be IMPLEMENTED in implementer class.
    @Override
    public void MethodInInterface() {
        System.out.println("MethodInInterface Implemented by ConcreteClass runs");

    //    Cannot declare abstract method in a concrete class
    //    public abstract void AbstractMethodDeclarationInConcreteClassNotPossible(){
    //
    //    }
    }
}

내 이해 :

초록 방법 :

추상 클래스만이 추상적 인 방법을 보유 할 수 있습니다. 또한 파생 클래스는 메소드를 구현해야하며 클래스에 구현이 제공되지 않습니다.

가상 방법 :

클래스는 이것을 선언 할 수 있으며 동일한 구현도 제공 할 수 있습니다. 또한 파생 클래스는이를 무시하기 위해 메소드를 구현해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top