Java 인터페이스 및 추상 클래스 관련 면접 질문
추상 클래스
추상 클래스에 생성자()가 있을 수 있습니까?
예 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
Reference
이 문제에 관하여(Java 인터페이스 및 추상 클래스 관련 면접 질문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/prashantrmishra/java-inteface-and-abstract-class-related-interview-questions-l59텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)