Java 인터페이스 및 추상 클래스 관련 면접 질문

10166 단어 javaoops

추상 클래스



  • 추상 클래스에 생성자()가 있을 수 있습니까?

  • 예 abstarct 클래스는 생성자를 가질 수 있습니다. 정의하지 않아도 JVM은 추상 클래스에 대해 하나의 기본 생성자를 생성합니다.

  • 추상 클래스에서 생성자의 필요성은 무엇입니까?

  • 생성자의 주요 목적은 새로 생성된 개체를 초기화하는 것입니다. 추상 클래스에는 인스턴스 변수, 추상 메서드 및 비추상 메서드가 있습니다. 비추상 메서드와 인스턴스 변수를 초기화해야 하므로 추상 클래스에는 생성자가 있습니다.

  • 추상 클래스의 객체를 생성할 수 없기 때문에 추상 메서드에서 공동 생성자가 어떻게 호출됩니까?

  • 그것은 공동 생성자 연결의 도움으로 호출됩니다. 즉, 하위 클래스의 객체를 만들 때 추상 클래스의 생성자도 호출됩니다.

  • 추상 클래스가 인터페이스를 구현하면 어떻게 될까요?

  • 추상 클래스는 인터페이스에 정의된 하나 이상의 메서드 구현을 놓칠 수 있으며 오류가 발생하지 않습니다.
    이것은 정의에 따라 abstract 클래스가 sub-classes에 의해 확장되어야 하고 하위 클래스가 abstract 클래스를 확장할 때 모든 추상 메서드의 구현을 제공할 수 있기 때문입니다.

    class Main {
        public static void main(String[] args) {
            System.out.println("This is main class"); 
        }
    }
    
    abstract class Bird implements Ifly{
    
    }
    interface Ifly{
        public void fly();
    }
    


    출력: 오류 없음

    This is main class
    


    추상 메서드 Bird가 확장되는 즉시 인터페이스의 메서드를 포함하여 모든 추상 메서드를 구현해야 합니다Ifly.

    
    class Main  extends Bird{
        public static void main(String[] args) {
            System.out.println("This is main class"); 
        }
    }
    
    abstract class Bird implements Ifly{
    
    }
    interface Ifly{
        public void fly();
    }
    


    출력: 추상 메서드를 구현하지 않기 때문에 오류 발생fly()
    Main.java:4: error: Main is not abstract and does not override abstract method fly() in Ifly
    class Main  extends Bird{
    ^
    1 error
    


    상호 작용



  • 동일한 메서드를 가진 두 개의 인터페이스가 있는 경우 둘 다 클래스에 의해 구현되면 어떻게 됩니까?

  • 메서드가 추상적이고 메서드 서명이 동일하면(반환 유형 포함) 구현 클래스는 하나의 메서드만 재정의해야 하며 문제가 발생하지 않습니다.

    class HelloWorld implements Face,Anatomy {
        public static void main(String[] args) {
            System.out.println("Hello, World!"); 
            HelloWorld w  = new HelloWorld();
            w.getName();
        }
        @Override
        public void getName(){}
    }
    interface Face{
        void getName();
    }
    interface Anatomy {
        void getName();
    }
    


    산출:

    Hello, World!
    


    메모:
    그러나 두 메서드에서 반환 유형이 다른 경우 클래스를 구현하면 두 메서드를 모두 재정의해야 합니다.

    메모:
    두 인터페이스에 동일한 이름을 가진 기본 메서드가 있으면 컴파일 시간 오류가 발생합니다.

    반환 유형이 동일한 경우:

    class Main implements Face,Anatomy {
        public static void main(String[] args) {
        }
        @Override
        public void getName(){}
    }
    interface Face{
        void getName();
        default void getFaceOrientation(){
            System.out.println("the default face shape fo Face interface");
        }
    }
    interface Anatomy {
        void getName();
         default void getFaceOrientation(){
            System.out.println("the default face shape of Anatomy interface");
        }
    }
    


    산출:

    Main.java:4: error: types Face and Anatomy are incompatible;
    class Main implements Face,Anatomy {
    ^
      class Main inherits unrelated defaults for getFaceOrientation() from types Face and Anatomy
    1 error
    
    


    반환 유형이 다른 경우:

    class Main implements Face,Anatomy {
        public static void main(String[] args) {
        }
        @Override
        public void getName(){}
    }
    interface Face{
        void getName();
        default void getFaceOrientation(){
            System.out.println("the default face shape fo Face interface");
        }
    }
    interface Anatomy {
        void getName();
         default String getFaceOrientation(){
            return "the default face shape of Anatomy interface";
        }
    }
    


    산출

    Main.java:4: error: types Anatomy and Face are incompatible;
    class Main implements Face,Anatomy {
    ^
      both define getFaceOrientation(), but with unrelated return types
    1 error
    

    좋은 웹페이지 즐겨찾기