면접 질문 90% 보장
300개의 핵심 Java 인터뷰 질문 목록이 있습니다. 귀하에게 요청된 핵심 Java 인터뷰 질문이 있는 경우 질문하기 섹션에 게시해 주세요. 우리는 귀하가 자주 묻는 인터뷰 질문과 답변의 90%를 여기에서 얻을 수 있다고 확신합니다.
Core Java 인터뷰 질문에 대한 답변은 짧고 간단합니다. 자바 핵심 면접 질문은 자바 기초 면접 질문, OOP 인터뷰 질문, 문자열 처리 인터뷰 질문, 멀티스레딩 인터뷰 질문, 컬렉션 인터뷰 질문, JDBC 인터뷰 질문 등으로 분류됩니다.
1 2 삼 4 5
핵심 Java: Java 인터뷰 질문의 기본
1) 자바란 무엇인가?
자바 높은 수준이고, 객체지향 , 강력하고 안전한 프로그래밍 언어, 플랫폼 독립적인 고성능, 다중 스레드 및 이식 가능한 프로그래밍 언어입니다. 에 의해 개발되었습니다. 제임스 고슬링 1991년 6월. 자체 JRE와 API를 제공하므로 플랫폼이라고도 할 수 있습니다.
2) C++과 Java의 차이점은 무엇입니까?
차이점 C++ 및 Java는 다음 표에 나와 있습니다.
비교지수 | C++ | 자바 |
---|---|---|
플랫폼 독립적 | C++는 플랫폼에 따라 다릅니다. | Java는 플랫폼 독립적입니다. |
주로 사용 | C++는 주로 시스템 프로그래밍에 사용됩니다. | Java는 주로 응용프로그램 프로그래밍에 사용됩니다. 윈도우, 웹 기반, 기업 및 모바일 애플리케이션에서 널리 사용됩니다. |
디자인 목표 | C++는 시스템 및 애플리케이션 프로그래밍을 위해 설계되었습니다. 의 연장선이었습니다 C 프로그래밍 언어 . | Java는 인쇄 시스템용 인터프리터로 설계 및 제작되었지만 나중에 지원 네트워크 컴퓨팅으로 확장되었습니다. 보다 폭넓은 사용자가 사용하기 쉽고 접근하기 쉽도록 설계되었습니다. |
이동 | C++에서는 goto 문을 지원합니다. | Java에서는 goto 문을 지원하지 않습니다. |
다중 상속 | C++에서는 다중 상속을 지원합니다. | Java는 클래스를 통한 다중 상속을 지원하지 않습니다. 이는 다음을 통해 달성할 수 있습니다. 자바의 인터페이스 . |
연산자 오버로딩 | C++ 지원 연산자 오버로딩 . | Java는 연산자 오버로딩을 지원하지 않습니다. |
포인터 | C++에서는 포인터를 지원합니다. C++로 포인터 프로그램을 작성할 수 있습니다. | Java는 내부적으로 포인터를 지원합니다. 그러나 Java에서는 포인터 프로그램을 작성할 수 없습니다. 이는 Java가 Java에서 포인터 지원을 제한했음을 의미합니다. |
컴파일러와 인터프리터 | C++에서는 컴파일러만 사용합니다. C++는 소스 코드를 기계 코드로 변환하는 컴파일러를 사용하여 컴파일되고 실행되므로 C++는 플랫폼에 따라 다릅니다. | Java는 컴파일러와 인터프리터를 모두 사용합니다. Java 소스 코드는 컴파일 시 바이트코드로 변환됩니다. 인터프리터는 런타임에 이 바이트코드를 실행하고 출력을 생성합니다. Java는 해석되므로 플랫폼 독립적입니다. |
값에 의한 호출 및 참조에 의한 호출 | C++에서는 값에 의한 호출과 참조에 의한 호출을 모두 지원합니다. | Java는 값별 호출만 지원합니다. Java에는 참조에 의한 호출이 없습니다. |
구조와 결합 | C++는 구조체와 공용체를 지원합니다. | Java는 구조와 공용체를 지원하지 않습니다. |
스레드 지원 | C++에는 스레드에 대한 기본 지원이 없습니다. 스레드 지원을 위해 타사 라이브러리를 사용합니다. | 자바에는 내장되어 있습니다 실 지원하다. |
문서 설명 | C++에서는 문서 주석을 지원하지 않습니다. | Java는 Java 소스 코드에 대한 문서를 생성하기 위해 문서 주석(/** ... */)을 지원합니다. |
가상 키워드 | C++에서는 함수를 재정의할지 여부를 결정할 수 있도록 virtual 키워드를 지원합니다. | Java에는 가상 키워드가 없습니다. 기본적으로 모든 비정적 메서드를 재정의할 수 있습니다. 즉, 비정적 메서드는 기본적으로 가상입니다. |
부호 없는 오른쪽 시프트 >>> | C++에서는 >>> 연산자를 지원하지 않습니다. | Java는 음수의 상단을 0으로 채우는 부호 없는 오른쪽 시프트 >>> 연산자를 지원합니다. 양수의 경우 >> 연산자와 동일하게 작동합니다. |
상속 트리 | C++은 항상 새로운 상속 트리를 생성합니다. | Java에서는 모든 클래스가 Java의 Object 클래스의 하위 클래스이기 때문에 항상 단일 상속 트리를 사용합니다. 객체 클래스는 계승 자바의 트리. |
하드웨어 | C++는 하드웨어에 더 가깝습니다. | Java는 하드웨어와 대화형이 아닙니다. |
객체지향 | C++는 객체 지향 언어입니다. 그러나 C 언어에서는 단일 루트 계층 구조가 불가능합니다. | 자바는 또한 객체지향 언어. 그러나 기본 유형을 제외한 모든 것은 Java의 객체입니다. 모든 것이 java.lang.Object에서 파생되므로 이는 단일 루트 계층 구조입니다. |
3) Java 프로그래밍 언어의 기능을 나열하십시오.
Java 프로그래밍 언어에는 다음과 같은 기능이 있습니다.
4) 자바 가상 머신이란 무엇을 이해하는가?
자바 가상 머신 컴퓨터에서 Java 프로그램을 실행할 수 있게 해주는 가상 머신입니다. JVM은 Java 코드에 있는 기본 메소드를 호출하는 런타임 엔진처럼 작동합니다. JVM은 컴퓨터 시스템에서 구현되어야 하는 사양입니다. Java 코드는 JVM에 의해 컴파일되어 기계 독립적이고 원시 코드에 가까운 바이트코드가 됩니다.
5) JDK, JRE, JVM의 차이점은 무엇입니까?
JVM
JVM은 Java Virtual Machine의 약어입니다. Java 바이트코드가 실행될 수 있는 런타임 환경을 제공하는 추상 기계입니다. Java Virtual Machine의 작동을 지정하는 사양입니다. 해당 구현은 Oracle 및 기타 회사에서 제공되었습니다. 그 구현을 JRE라고 합니다.
JVM은 다양한 하드웨어 및 소프트웨어 플랫폼에서 사용할 수 있습니다(따라서 JVM은 플랫폼에 따라 다릅니다). Java 클래스를 실행할 때 생성되는 런타임 인스턴스입니다. JVM에는 사양, 구현, 인스턴스라는 세 가지 개념이 있습니다.
JRE
JRE는 자바 런타임 환경을 의미합니다. JVM의 구현입니다. Java Runtime Environment는 Java 애플리케이션 개발에 사용되는 소프트웨어 도구 세트입니다. 런타임 환경을 제공하는데 사용됩니다. JVM의 구현입니다. 물리적으로 존재합니다. 여기에는 JVM이 런타임에 사용하는 라이브러리 세트와 기타 파일이 포함되어 있습니다.
JDK
JDK는 Java Development Kit의 약어입니다. Java 애플리케이션 및 애플릿을 개발하는 데 사용되는 소프트웨어 개발 환경입니다. 물리적으로 존재합니다. 여기에는 JRE + 개발 도구가 포함되어 있습니다. JDK는 Oracle Corporation에서 출시한 아래 Java 플랫폼 중 하나를 구현한 것입니다.
- 스탠다드 에디션 자바 플랫폼
- 엔터프라이즈 에디션 Java 플랫폼
- 마이크로 에디션 Java 플랫폼
6) JVM에서는 몇 종류의 메모리 영역을 할당하나요?
다양한 유형:
7) JIT 컴파일러란 무엇입니까?
JIT(Just-In-Time) 컴파일러: 성능을 향상시키기 위해 사용됩니다. JIT는 비슷한 기능을 가진 바이트코드 부분을 동시에 컴파일하므로 컴파일에 필요한 시간이 줄어듭니다. 여기서 컴파일러라는 용어는 JVM(Java Virtual Machine)의 명령어 세트를 특정 CPU의 명령어 세트로 번역하는 것을 의미합니다.
8) 플랫폼은 무엇입니까?
플랫폼은 소프트웨어가 실행되는 하드웨어 또는 소프트웨어 환경입니다. 플랫폼에는 소프트웨어 기반과 하드웨어 기반의 두 가지 유형이 있습니다. Java는 소프트웨어 기반 플랫폼을 제공합니다.
9) Java 플랫폼과 다른 플랫폼의 주요 차이점은 무엇입니까?
Java 플랫폼과 다른 플랫폼 간에는 다음과 같은 차이점이 있습니다.
- Java는 소프트웨어 기반 플랫폼인 반면 다른 플랫폼은 하드웨어 플랫폼이거나 소프트웨어 기반 플랫폼일 수 있습니다.
- Java는 다른 하드웨어 플랫폼 위에서 실행되는 반면 다른 플랫폼은 하드웨어 구성 요소만 가질 수 있습니다.
10) Java의 '한 번 작성하여 어디서나 실행' 특성을 부여하는 것은 무엇입니까?
바이트코드. 자바 컴파일러는 자바 프로그램을 소스 코드와 기계 코드 사이의 중간 언어인 클래스 파일(바이트 코드)로 변환합니다. 이 바이트코드는 플랫폼별로 다르지 않으며 모든 컴퓨터에서 실행될 수 있습니다.
11) 클래스로더란 무엇입니까?
클래스로더는 클래스 파일을 로드하는 데 사용되는 JVM의 하위 시스템입니다. Java 프로그램을 실행할 때마다 클래스로더에 의해 먼저 로드됩니다. Java에는 세 가지 내장 클래스로더가 있습니다.
12) 빈 .java 파일 이름이 유효한 소스 파일 이름입니까?
예, Java에서는 Java 파일을 다음과 같이 저장할 수 있습니다. .자바 단지, 우리는 그것을 다음과 같이 컴파일해야 합니다: javac.java 그리고 실행 자바 클래스 이름 간단한 예를 들어보겠습니다:
//save by .java only class A{ public static void main(String args[]){ System.out.println('Hello java'); } } //compile by javac .java //run by java A
그것을 컴파일 javac.java
그것을 실행 자바 A
13) Java에서는 삭제, 다음, 기본, 종료 또는 null 키워드가 있습니까?
아니요.
14) 명령줄에 인수를 제공하지 않으면 main() 메서드에 전달되는 문자열 배열에 저장된 값은 비어 있거나 NULL 중 무엇입니까?
비어 있지만 null은 아닙니다.
15) public static void 대신 static public void를 작성하면 어떻게 되나요?
Java에서는 지정자의 순서가 중요하지 않기 때문에 프로그램이 올바르게 컴파일되고 실행됩니다.
16) 지역변수의 기본값은 무엇인가요?
지역 변수는 기본 값이나 객체 참조 모두 기본값으로 초기화되지 않습니다.
17) Java의 다양한 액세스 지정자는 무엇입니까?
Java에서 액세스 지정자는 메서드, 클래스 또는 변수의 액세스 범위를 정의하는 데 사용되는 키워드입니다. Java에는 다음과 같은 네 가지 액세스 지정자가 있습니다.
18) 정적 메소드와 변수의 목적은 무엇입니까?
static으로 정의된 메서드나 변수는 클래스의 모든 개체에서 공유됩니다. 정적은 객체가 아닌 클래스의 일부입니다. 정적 변수는 클래스 영역에 저장되며 이러한 변수에 액세스하기 위해 개체를 만들 필요가 없습니다. 따라서 클래스의 모든 객체에 공통되는 변수나 메서드를 정의해야 하는 경우에는 static이 사용됩니다.
예를 들어, 대학의 학생 집합을 시뮬레이션하는 수업에서 대학 이름은 모든 학생에게 공통된 속성입니다. 따라서 대학 이름은 다음과 같이 정의됩니다. 공전 .
19) Java 패키지의 장점은 무엇입니까?
Java로 패키지를 정의하면 다양한 이점이 있습니다.
- 패키지는 이름 충돌을 방지합니다.
- 패키지는 더 쉬운 액세스 제어를 제공합니다.
- 외부에 표시되지 않고 패키지에서 사용되는 숨겨진 클래스를 가질 수도 있습니다.
- 관련 클래스를 찾는 것이 더 쉽습니다.
20) 다음 Java 프로그램의 출력은 무엇입니까?
class Test { public static void main (String args[]) { System.out.println(10 + 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 + 20); } }
위 코드의 출력은 다음과 같습니다.
30Javatpoint Javatpoint1020
설명
첫 번째 경우에는 10과 20이 숫자로 처리되어 30이 됩니다. 이제 그 합인 30이 문자열로 처리되어 문자열과 연결됩니다. Javatpoint . 따라서 출력은 다음과 같습니다. 30자바포인트 .
두 번째 경우에는 Javatpoint 문자열이 10과 연결되어 문자열이 됩니다. Javatpoint10 그런 다음 20과 연결되어 Javatpoint1020 .
21) 다음 Java 프로그램의 출력은 무엇입니까?
class Test { public static void main (String args[]) { System.out.println(10 * 20 + 'Javatpoint'); System.out.println('Javatpoint' + 10 * 20); } }
위 코드의 출력은 다음과 같습니다.
200Javatpoint Javatpoint200
설명
첫 번째 경우에는 숫자 10과 20을 먼저 곱한 다음 결과 200을 문자열로 처리하여 문자열과 연결합니다. Javatpoint 출력을 생성하기 위해 200자바포인트 .
두 번째 경우에는 곱셈의 우선순위가 덧셈보다 높기 때문에 숫자 10과 20을 먼저 곱하여 200이 됩니다. 결과 200은 문자열로 처리되어 문자열과 연결됩니다. Javatpoint 출력을 다음과 같이 생성합니다. Javatpoint200 .
22) 다음 Java 프로그램의 출력은 무엇입니까?
class Test { public static void main (String args[]) { for(int i=0; 0; i++) { System.out.println('Hello Javatpoint'); } } }
위 코드는 for 루프가 두 번째 부분에서 부울 값을 요구하고 정수 값(예: 0)을 제공하기 때문에 컴파일 시간 오류를 발생시킵니다.
핵심 Java - OOP 개념: 초기 OOP 인터뷰 질문
50개가 넘는 OOP(객체 지향 프로그래밍 및 시스템) 면접 질문이 제공됩니다. 하지만 이해를 돕기 위해 생성자 면접 질문, 정적 면접 질문, 상속 면접 질문, 추상화 면접 질문, 다형성 면접 질문 등 여러 섹션으로 분류되었습니다.
23) 객체지향 패러다임이란 무엇인가요?
이는 자신이 속한 클래스에 데이터와 메서드가 정의되어 있는 객체를 기반으로 하는 프로그래밍 패러다임입니다. 객체 지향 패러다임은 모듈성과 재사용성의 장점을 통합하는 것을 목표로 합니다. 객체는 애플리케이션과 프로그램을 설계하기 위해 서로 상호 작용하는 클래스의 인스턴스입니다. 객체지향 패러다임에는 다음과 같은 특징이 있습니다.
- 프로그램 설계에서는 상향식 접근 방식을 따릅니다.
- 객체의 데이터에 대해 작동하는 메서드를 사용하여 데이터에 집중
- 사용자에게 복잡성을 숨기고 기능만 보여주는 캡슐화 및 추상화와 같은 개념을 포함합니다.
- 상속, 추상화 등과 같은 실시간 접근 방식을 구현합니다.
- 객체지향 패러다임의 예로는 C++, Simula, Smalltalk, Python, C# 등이 있습니다.
24) 물건이란 무엇입니까?
객체는 일부 상태와 동작을 갖는 실시간 엔터티입니다. Java에서 Object는 객체의 상태인 인스턴스 변수와 객체의 동작인 메소드를 갖는 클래스의 인스턴스입니다. 클래스의 객체는 다음을 사용하여 생성될 수 있습니다. 새로운 예어.
25) 객체 지향 프로그래밍 언어와 객체 기반 프로그래밍 언어의 차이점은 무엇입니까?
객체 지향 언어와 객체 기반 언어에는 다음과 같은 기본적인 차이점이 있습니다.
- 객체 지향 언어는 OOP의 모든 개념을 따르는 반면 객체 기반 언어는 상속 및 다형성과 같은 OOP의 모든 개념을 따르지 않습니다.
- 객체 지향 언어에는 내장 객체가 없지만 객체 기반 언어에는 내장 객체가 있습니다. 예를 들어 JavaScript에는 창 객체가 있습니다.
- 객체 지향 프로그래밍의 예로는 Java, C#, Smalltalk 등이 있고, 객체 기반 언어의 예로는 JavaScript, VBScript 등이 있습니다.
26) 인스턴스 변수로 정의된 객체 참조의 초기 값은 무엇입니까?
Java에서는 모든 객체 참조가 null로 초기화됩니다.
핵심 Java - OOP 개념: 생성자 인터뷰 질문
27) 생성자는 무엇입니까?
생성자는 객체의 상태를 초기화하는 데 사용되는 특별한 유형의 메소드로 정의될 수 있습니다. 클래스가 인스턴스화될 때 호출되고 객체에 메모리가 할당됩니다. 매번 객체는 다음을 사용하여 생성됩니다. 새로운 키워드를 사용하면 클래스의 기본 생성자가 호출됩니다. 생성자의 이름은 클래스 이름과 유사해야 합니다. 생성자에는 명시적인 반환 유형이 있어서는 안 됩니다.
자세한 내용은.28) Java에서는 몇 가지 유형의 생성자가 사용됩니까?
생성자에 전달된 매개변수에 따라 Java에는 두 가지 유형의 생성자가 있습니다.
29) 기본 생성자의 목적은 무엇입니까?
기본 생성자의 목적은 객체에 기본값을 할당하는 것입니다. Java 컴파일러는 클래스에 생성자가 없는 경우 암시적으로 기본 생성자를 생성합니다.
class Student3{ int id; String name; void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student3 s1=new Student3(); Student3 s2=new Student3(); s1.display(); s2.display(); } }지금 테스트해보세요
산출:
0 null 0 null
설명: 위 클래스에서는 생성자를 생성하지 않으므로 컴파일러가 기본 생성자를 제공합니다. 여기서는 0과 null 값이 기본 생성자에 의해 제공됩니다.
자세한 내용은.
30) 생성자는 어떤 값을 반환합니까?
연령: 예, 생성자는 클래스의 현재 인스턴스를 암시적으로 반환합니다(생성자와 함께 명시적인 반환 유형을 사용할 수 없습니다). 자세한 내용은.
31) 생성자는 상속되나요?
아니요, 생성자는 상속되지 않습니다.
32) 생성자를 최종으로 만들 수 있나요?
아니요, 생성자는 최종일 수 없습니다.
내 아이폰 안드로이드 찾아줘
33) 생성자를 오버로드할 수 있나요?
예, 생성자가 허용하는 인수 수를 변경하거나 매개변수의 데이터 유형을 변경하여 생성자를 오버로드할 수 있습니다. 다음 예를 고려하십시오.
class Test { int i; public Test(int k) { i=k; } public Test(int k, int m) { System.out.println('Hi I am assigning the value max(k, m) to i'); if(k>m) { i=k; } else { i=m; } } } public class Main { public static void main (String args[]) { Test test1 = new Test(10); Test test2 = new Test(12, 15); System.out.println(test1.i); System.out.println(test2.i); } }
위 프로그램에서 생성자 Test는 다른 생성자로 오버로드됩니다. 생성자에 대한 첫 번째 호출에서는 인수가 1개인 생성자가 호출되고 i는 값 10으로 초기화됩니다. 그러나 생성자에 대한 두 번째 호출에서는 인수가 2개인 생성자가 호출되며 i가 초기화됩니다. 값은 15입니다.
34) 자바의 복사 생성자란 무엇을 이해하나요?
Java에는 복사 생성자가 없습니다. 그러나 C++의 복사 생성자와 같이 한 개체에서 다른 개체로 값을 복사할 수 있습니다.
Java에서 한 객체의 값을 다른 객체로 복사하는 방법에는 여러 가지가 있습니다. 그들은:
- 생성자별
- 한 객체의 값을 다른 객체에 할당함으로써
- Object 클래스의 clone() 메소드를 통해
이 예에서는 Java 생성자를 사용하여 한 개체의 값을 다른 개체에 복사합니다.
//Java program to initialize the values from one object to another class Student6{ int id; String name; //constructor to initialize integer and string Student6(int i,String n){ id = i; name = n; } //constructor to initialize another object Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,'Karan'); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } }지금 테스트해보세요
산출:
111 Karan 111 Karan
35) 생성자와 메소드의 차이점은 무엇입니까?
생성자와 메서드에는 많은 차이점이 있습니다. 아래에 나와 있습니다.
자바 생성자 | 자바 방법 |
---|---|
생성자는 객체의 상태를 초기화하는 데 사용됩니다. | 메소드는 객체의 동작을 노출하는 데 사용됩니다. |
생성자에는 반환 유형이 없어야 합니다. | 메서드에는 반환 유형이 있어야 합니다. |
생성자는 암시적으로 호출됩니다. | 메서드가 명시적으로 호출됩니다. |
Java 컴파일러는 클래스에 생성자가 없는 경우 기본 생성자를 제공합니다. | 어떤 경우에도 컴파일러는 메서드를 제공하지 않습니다. |
생성자 이름은 클래스 이름과 동일해야 합니다. | 메소드 이름은 클래스 이름과 같을 수도 있고 아닐 수도 있습니다. |
36) 다음 Java 프로그램의 출력은 무엇입니까?
public class Test { Test(int a, int b) { System.out.println('a = '+a+' b = '+b); } Test(int a, float b) { System.out.println('a = '+a+' b = '+b); } public static void main (String args[]) { byte a = 10; byte b = 15; Test test = new Test(a,b); } }
다음 프로그램의 출력은 다음과 같습니다.
a = 10 b = 15
여기서 변수 a와 b의 데이터 유형, 즉 byte는 int로 승격되고 두 개의 정수 매개변수를 가진 첫 번째 매개변수화된 생성자가 호출됩니다.
37) 다음 Java 프로그램의 출력은 무엇입니까?
class Test { int i; } public class Main { public static void main (String args[]) { Test test = new Test(); System.out.println(test.i); } }
변수 i가 내부적으로 0으로 초기화되었기 때문에 프로그램의 출력은 0입니다. 클래스에 생성자가 없으면 기본 생성자가 암시적으로 호출된다는 것을 알고 있으므로 클래스에 생성자가 없으므로 변수 i는 0으로 초기화됩니다.
38) 다음 Java 프로그램의 출력은 무엇입니까?
class Test { int test_a, test_b; Test(int a, int b) { test_a = a; test_b = b; } public static void main (String args[]) { Test test = new Test(); System.out.println(test.test_a+' '+test.test_b); } }
이있다 컴파일러 오류 클래스에 없는 기본 메소드의 기본 생성자에 대한 호출이 있기 때문에 프로그램에서 발생합니다. 그러나 Test 클래스에는 매개변수화된 생성자가 하나만 있습니다. 따라서 기본 생성자는 생성자에 의해 암시적으로 호출되지 않습니다.
핵심 Java - OOP 개념: 정적 키워드 인터뷰 질문
39) 정적변수란 무엇인가요?
정적 변수는 직원의 회사 이름, 학생의 대학 이름 등과 같이 모든 개체의 공통 속성(각 개체에 대해 고유하지 않음)을 참조하는 데 사용됩니다. 정적 변수는 클래스 영역에서 한 번만 메모리를 가져옵니다. 수업 로딩 시간. 정적 변수를 사용하면 프로그램의 메모리 효율성이 높아집니다(메모리가 절약됩니다). 정적 변수는 객체가 아닌 클래스에 속합니다.
//Program of static variable class Student8{ int rollno; String name; static String college ='ITS'; Student8(int r,String n){ rollno = r; name = n; } void display (){System.out.println(rollno+' '+name+' '+college);} public static void main(String args[]){ Student8 s1 = new Student8(111,'Karan'); Student8 s2 = new Student8(222,'Aryan'); s1.display(); s2.display(); } }지금 테스트해보세요
Output:111 Karan ITS 222 Aryan ITS
자세한 내용은.
40) 정적 메소드란 무엇입니까?
- 정적 메소드는 객체가 아닌 클래스에 속합니다.
- 정적 메서드를 호출하기 위해 개체를 만들 필요가 없습니다.
- 정적 메서드는 정적 변수의 값에 액세스하고 변경할 수 있습니다.
41) Java 정적 메소드에 적용되는 제한사항은 무엇입니까?
정적 메서드에는 두 가지 주요 제한 사항이 적용됩니다.
- 정적 메서드는 비정적 데이터 멤버를 사용하거나 비정적 메서드를 직접 호출할 수 없습니다.
- this 및 super는 비정적이므로 정적 컨텍스트에서 사용할 수 없습니다.
42) 왜 메인 메소드가 정적인가요?
개체가 정적 메서드를 호출할 필요가 없기 때문입니다. 기본 메서드를 비정적으로 만들면 JVM은 먼저 개체를 만든 다음 main() 메서드를 호출해야 하며 이로 인해 추가 메모리 할당이 발생합니다. 자세한 내용은.
43) 정적 메서드를 재정의할 수 있나요?
아니요, 정적 메서드를 재정의할 수 없습니다.
44) 정적 블록이란 무엇입니까?
정적 블록은 정적 데이터 멤버를 초기화하는 데 사용됩니다. 클래스 로딩 시 메인 메소드보다 먼저 실행됩니다.
class A2{ static{System.out.println('static block is invoked');} public static void main(String args[]){ System.out.println('Hello main'); } }지금 테스트해보세요
Output: static block is invoked Hello main
자세한 내용은.
45) main() 메소드 없이 프로그램을 실행할 수 있나요?
답변) 아니요, JDK 1.7 이전에는 static 블록을 사용하여 가능했습니다. JDK 1.7부터는 불가능합니다. 자세한 내용은.
46) 메인 메소드의 시그니처에서 static 수식어를 제거하면 어떻게 되나요?
프로그램이 컴파일됩니다. 그러나 런타임에는 'NoSuchMethodError' 오류가 발생합니다.
47) 정적(클래스) 메소드와 인스턴스 메소드의 차이점은 무엇입니까?
정적 또는 클래스 메서드 | 인스턴스 메소드 |
---|---|
1)정적으로 선언된 메소드를 정적 메소드라고 합니다. | 정적으로 선언되지 않은 메서드를 인스턴스 메서드라고 합니다. |
2) 정적 메소드를 호출하기 위해 객체를 생성할 필요가 없습니다. | 인스턴스 메소드를 호출하려면 객체가 필요합니다. |
3) 비정적(인스턴스) 멤버는 정적 컨텍스트(정적 메서드, 정적 블록 및 정적 중첩 클래스)에서 직접 액세스할 수 없습니다. | 정적 및 비정적 변수는 모두 인스턴스 메서드에서 액세스할 수 있습니다. |
4) 예: public static int Cube(int n){ return n*n*n;} | 예: public void msg(){...}. |
48) 생성자를 정적으로 만들 수 있나요?
우리가 알고 있듯이 정적 컨텍스트(메서드, 블록 또는 변수)는 객체가 아닌 클래스에 속합니다. 생성자는 객체가 생성될 때만 호출되므로 생성자를 정적으로 만드는 것은 의미가 없습니다. 그러나 그렇게 하려고 하면 컴파일러에서 컴파일러 오류를 표시합니다.
49) Java에서 추상 메서드를 정적으로 만들 수 있나요?
Java에서는 추상 메서드를 정적으로 만들면 클래스의 일부가 되어 불필요한 직접 호출이 가능합니다. 정의되지 않은 메서드를 호출하는 것은 전혀 쓸모가 없으므로 허용되지 않습니다.
50) 추상 클래스에서 정적 변수와 메서드를 선언할 수 있나요?
예, 추상 메서드에서 정적 변수와 메서드를 선언할 수 있습니다. 정적 컨텍스트에 액세스하기 위해 객체를 만들 필요가 없다는 것을 알고 있으므로 추상 클래스의 이름을 사용하여 추상 클래스 내부에 선언된 정적 컨텍스트에 액세스할 수 있습니다. 다음 예를 고려하십시오.
abstract class Test { static int i = 102; static void TestMethod() { System.out.println('hi !! I am good !!'); } } public class TestClass extends Test { public static void main (String args[]) { Test.TestMethod(); System.out.println('i = '+Test.i); } }
산출
hi !! I am good !! i = 102
핵심 Java - OOP 개념: 상속 인터뷰 질문
51) 무엇입니까? 이것 자바의 키워드?
그만큼 이것 키워드는 현재 객체를 참조하는 참조 변수입니다. Java에서는 이 키워드를 다양한 용도로 사용합니다. 인스턴스 메서드, 변수, 생성자 등과 같은 현재 클래스 속성을 참조하는 데 사용할 수 있습니다. 또한 메서드나 생성자에 인수로 전달될 수도 있습니다. 또한 현재 클래스 인스턴스로 메서드에서 반환될 수도 있습니다.
자세한 내용은.
52) 이 키워드의 주요 용도는 무엇입니까?
다음과 같은 용도가 있습니다. 이것 예어.
53) 참조를 다음에 할당할 수 있습니까? 이것 변하기 쉬운?
아니요. 이는 항상 현재 클래스 객체를 가리키고 Java의 최종 참조이기 때문에 어떤 값에도 할당할 수 없습니다. 그러나 그렇게 하려고 하면 컴파일러 오류가 표시됩니다. 다음 예를 고려하십시오.
public class Test { public Test() { this = null; System.out.println('Test class constructor called'); } public static void main (String args[]) { Test t = new Test(); } }
산출
Test.java:5: error: cannot assign a value to final variable this this = null; ^ 1 error
54) 할 수 있다 이것 키워드는 정적 멤버를 참조하는 데 사용됩니까?
예. 이 키워드는 현재 클래스 개체를 참조하는 참조 변수일 뿐이므로 정적 멤버를 참조하는 데 사용할 수 있습니다. 그러나 우리가 알고 있듯이 객체를 통해 정적 변수에 액세스하는 것은 불필요하므로 이를 사용하여 정적 멤버를 참조하는 것은 최선의 방법이 아닙니다. 다음 예를 고려하십시오.
public class Test { static int i = 10; public Test () { System.out.println(this.i); } public static void main (String args[]) { Test t = new Test(); } }
산출
10
55) 이 키워드를 사용하여 생성자 연결을 어떻게 수행할 수 있습니까?
생성자 연결을 사용하면 현재 클래스 객체와 관련하여 클래스의 다른 생성자에서 하나의 생성자를 호출할 수 있습니다. 이 키워드를 사용하여 동일한 클래스 내에서 생성자 연결을 수행할 수 있습니다. 이 키워드를 사용하여 생성자 연결을 달성하는 방법을 보여주는 다음 예를 고려하십시오.
public class Employee { int id,age; String name, address; public Employee (int age) { this.age = age; } public Employee(int id, int age) { this(age); this.id = id; } public Employee(int id, int age, String name, String address) { this(id, age); this.name = name; this.address = address; } public static void main (String args[]) { Employee emp = new Employee(105, 22, 'Vikas', 'Delhi'); System.out.println('ID: '+emp.id+' Name:'+emp.name+' age:'+emp.age+' address: '+emp.address); } }
산출
ID: 105 Name:Vikas age:22 address: Delhi
56) 이것을 현재 클래스 객체 자체 대신 메소드에 전달하면 어떤 이점이 있습니까?
우리가 알고 있듯이 이는 현재 클래스 객체를 참조하므로 현재 클래스 객체와 유사해야 합니다. 그러나 이를 현재 클래스 객체 대신 메서드에 전달하면 두 가지 주요 이점이 있을 수 있습니다.
- 이것은 최종 변수입니다. 따라서 이는 새로운 값에 할당될 수 없지만 현재 클래스 객체는 최종 객체가 아니며 변경될 수 있습니다.
- 이는 동기화된 블록에서 사용될 수 있습니다.
57) 상속이란 무엇입니까?
상속은 한 객체가 다른 클래스의 다른 객체의 모든 속성과 동작을 획득하는 메커니즘입니다. 코드 재사용성 및 메서드 재정의에 사용됩니다. Java 상속의 기본 개념은 기존 클래스를 기반으로 새 클래스를 생성할 수 있다는 것입니다. 기존 클래스에서 상속하면 상위 클래스의 메서드와 필드를 재사용할 수 있습니다. 또한 현재 클래스에 새 메서드와 필드를 추가할 수도 있습니다. 상속은 부모-자식 관계라고도 하는 IS-A 관계를 나타냅니다.
Java에는 다섯 가지 유형의 상속이 있습니다.
- 단일 수준 상속
- 다단계 상속
- 다중 상속
- 계층적 상속
- 하이브리드 상속
Java에서는 클래스를 통한 다중 상속이 지원되지 않습니다.
자세한 내용은.58) Java에서 상속이 사용되는 이유는 무엇입니까?
Java에서 상속을 사용하면 다음과 같은 다양한 이점이 있습니다.
- 상속은 코드 재사용성을 제공합니다. 파생 클래스는 메서드의 특정 구현을 제공해야 하는 경우가 아니면 기본 클래스의 메서드를 다시 정의할 필요가 없습니다.
- 상속을 사용하지 않으면 런타임 다형성을 얻을 수 없습니다.
- OOP를 더욱 현실적으로 만드는 실시간 개체를 사용하여 클래스 상속을 시뮬레이션할 수 있습니다.
- 상속은 데이터 숨김을 제공합니다. 기본 클래스는 비공개로 설정하여 파생 클래스의 일부 데이터를 숨길 수 있습니다.
- 상속 없이는 메서드 재정의를 수행할 수 없습니다. 메소드 오버라이딩을 통해 기본 클래스에 포함된 일부 기본 메소드의 특정 구현을 제공할 수 있습니다.
59) 모든 클래스의 슈퍼클래스는 어떤 클래스인가요?
객체 클래스는 Java의 다른 모든 클래스의 슈퍼클래스입니다.
60) 왜 자바에서는 다중 상속이 지원되지 않나요?
복잡성을 줄이고 언어를 단순화하기 위해 Java에서는 다중 상속이 지원되지 않습니다. A, B, C가 세 클래스인 시나리오를 생각해 보세요. C 클래스는 A 및 B 클래스를 상속합니다. A 클래스와 B 클래스의 메서드가 동일한 경우 이를 자식 클래스 객체에서 호출하면 A 클래스나 B 클래스의 메서드를 호출하기가 모호해집니다.
컴파일 시간 오류는 런타임 오류보다 낫기 때문에 Java는 2개의 클래스를 상속하는 경우 컴파일 시간 오류를 렌더링합니다. 따라서 동일한 방법을 사용하든 다른 방법을 사용하든 컴파일 시간 오류가 발생합니다.
class A{ void msg(){System.out.println('Hello');} } class B{ void msg(){System.out.println('Welcome');} } class C extends A,B{//suppose if it were Public Static void main(String args[]){ C obj=new C(); obj.msg();//Now which msg() method would be invoked? } }지금 테스트해보세요
Compile Time Error
61) 집계란 무엇입니까?
집계는 집계 클래스가 소유한 클래스에 대한 참조를 포함하는 두 클래스 간의 관계로 정의할 수 있습니다. 집계는 다음과 같이 가장 잘 설명됩니다. 가지고있다 관계. 예를 들어 나이, 이름, 급여 등 다양한 필드를 갖는 Employee 집계 클래스에는 Address-Line 1, City, State 및 pin-code와 같은 다양한 필드를 갖는 Address 클래스의 객체도 포함됩니다. 즉, Employee(클래스)가 Address 클래스의 객체를 가지고 있다고 말할 수 있습니다. 다음 예를 고려하십시오.
Address.java
public class Address { String city,state,country; public Address(String city, String state, String country) { this.city = city; this.state = state; this.country = country; } }
Employee.java
public class Emp { int id; String name; Address address; public Emp(int id, String name,Address address) { this.id = id; this.name = name; this.address=address; } void display(){ System.out.println(id+' '+name); System.out.println(address.city+' '+address.state+' '+address.country); } public static void main(String[] args) { Address address1=new Address('gzb','UP','india'); Address address2=new Address('gno','UP','india'); Emp e=new Emp(111,'varun',address1); Emp e2=new Emp(112,'arun',address2); e.display(); e2.display(); } }
산출
111 varun gzb UP india 112 arun gno UP india
62) 작곡이란 무엇입니까?
다른 클래스 내에 클래스 참조를 보유하는 것을 구성이라고 합니다. 객체가 다른 객체를 포함할 때 컨테이너 객체가 없으면 포함된 객체가 존재할 수 없는 경우 이를 구성이라고 합니다. 즉, 구성은 두 개체 간의 더 강한 관계를 나타내는 집계의 특별한 경우라고 말할 수 있습니다. 예: 수업에는 학생이 포함됩니다. 학생은 수업 없이는 존재할 수 없습니다. 수업과 학생 사이에는 구성이 존재합니다.
63) 집합과 구성의 차이점은 무엇입니까?
집계는 약한 관계를 나타내고 구성은 강한 관계를 나타냅니다. 예를 들어 자전거에는 표시기(집계)가 있지만 자전거에는 엔진(구성)이 있습니다.
64) Java는 왜 포인터를 지원하지 않습니까?
포인터는 메모리 주소를 참조하는 변수입니다. 안전하지 않고(보안되지 않음) 이해하기 복잡하기 때문에 Java에서는 사용되지 않습니다.
65) 자바에서 슈퍼(super)란 무엇인가요?
그만큼 감독자 Java의 키워드는 직계 상위 클래스 객체를 참조하는 데 사용되는 참조 변수입니다. 하위 클래스의 인스턴스를 생성할 때마다 상위 참조 변수가 참조하는 상위 클래스의 인스턴스가 암시적으로 생성됩니다. super()는 super 또는 this가 없는 경우 컴파일러에 의해 암시적으로 클래스 생성자에서 호출됩니다.
class Animal{ Animal(){System.out.println('animal is created');} } class Dog extends Animal{ Dog(){ System.out.println('dog is created'); } } class TestSuper4{ public static void main(String args[]){ Dog d=new Dog(); } }지금 테스트해보세요
산출:
animal is created dog is created자세한 내용은.
66) super 키워드를 사용하여 생성자 연결을 어떻게 수행할 수 있나요?
class Person { String name,address; int age; public Person(int age, String name, String address) { this.age = age; this.name = name; this.address = address; } } class Employee extends Person { float salary; public Employee(int age, String name, String address, float salary) { super(age,name,address); this.salary = salary; } } public class Test { public static void main (String args[]) { Employee e = new Employee(22, 'Mukesh', 'Delhi', 90000); System.out.println('Name: '+e.name+' Salary: '+e.salary+' Age: '+e.age+' Address: '+e.address); } }
산출
Name: Mukesh Salary: 90000.0 Age: 22 Address: Delhi
67) super 키워드의 주요 용도는 무엇입니까?
super 키워드의 용도는 다음과 같습니다.
- super는 직계 상위 클래스 인스턴스 변수를 참조하는 데 사용할 수 있습니다.
- super는 직계 상위 클래스 메소드를 호출하는 데 사용될 수 있습니다.
- super()는 직계 부모 클래스 생성자를 호출하는 데 사용할 수 있습니다.
68) this 키워드와 super 키워드의 차이점은 무엇인가요?
this 키워드와 super 키워드에는 다음과 같은 차이점이 있습니다.
- super 키워드는 항상 상위 클래스 컨텍스트를 가리키는 반면, 이 키워드는 항상 현재 클래스 컨텍스트를 가리킵니다.
- super 키워드는 파생 클래스 생성자 내에서 기본 클래스 변수를 초기화하는 데 주로 사용되는 반면, 이 키워드는 클래스 생성자에 전달될 때 지역 변수와 인스턴스 변수를 구별하는 데 주로 사용됩니다.
- super와 this는 생성자 내부의 첫 번째 문이어야 합니다. 그렇지 않으면 컴파일러에서 오류가 발생합니다.
69) 다음 Java 프로그램의 출력은 무엇입니까?
class Person { public Person() { System.out.println('Person class constructor called'); } } public class Employee extends Person { public Employee() { System.out.println('Employee class constructor called'); } public static void main (String args[]) { Employee e = new Employee(); } }
산출
Person class constructor called Employee class constructor called
설명
super() 또는 this()가 파생 클래스 생성자 내에 명시적으로 포함되지 않은 경우 super()는 컴파일러에 의해 암시적으로 호출됩니다. 따라서 이 경우에는 Person 클래스 생성자가 먼저 호출된 다음 Employee 클래스 생성자가 호출됩니다.
70) 생성자에서 this()와 super()를 모두 사용할 수 있나요?
아니요. this() 및 super()는 클래스 생성자의 첫 번째 문이어야 하기 때문입니다.
예:
public class Test{ Test() { super(); this(); System.out.println('Test class object is created'); } public static void main(String []args){ Test t = new Test(); } }
산출:
Test.java:5: error: call to this must be first statement in constructor
71) 객체 복제란 무엇인가요?
객체 복제는 객체의 정확한 복사본을 만드는 데 사용됩니다. Object 클래스의 clone() 메소드는 객체를 복제하는 데 사용됩니다. 그만큼 java.lang.복제 가능 인터페이스는 우리가 생성하려는 객체 복제가 있는 클래스에 의해 구현되어야 합니다. Cloneable 인터페이스를 구현하지 않으면 clone() 메소드는 CloneNotSupportedException을 생성합니다.
protected Object clone() throws CloneNotSupportedException자세한 내용은.
핵심 Java - OOP 개념: 메소드 오버로딩 인터뷰 질문
72) 메소드 오버로딩이란 무엇입니까?
메소드 오버로딩은 이름은 같지만 시그니처가 다른 여러 메소드를 생성할 수 있게 해주는 다형성 기술입니다. 두 가지 방법으로 메소드 오버로딩을 달성할 수 있습니다.
- 인수 수를 변경하여
- 인수의 데이터 유형을 변경하여
메소드 오버로딩은 프로그램의 가독성을 높입니다. 프로그램을 빠르게 파악하기 위해 메소드 오버로딩을 수행합니다.
자세한 내용은.73) Java에서 반환 유형을 변경하면 메소드 오버로딩이 불가능한 이유는 무엇입니까?
Java에서는 모호성을 피하기 위해 프로그램의 반환 유형을 변경하여 메서드 오버로드가 불가능합니다.
class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }}지금 테스트해보세요
산출:
Compile Time Error: method add(int, int) is already defined in class Adder자세한 내용은.
74) 메소드를 정적으로 만들어서 메소드를 오버로드할 수 있습니까?
아니요. 정적 키워드를 메서드에 적용하는 것만으로는 메서드를 오버로드할 수 없습니다(매개변수 수와 유형은 동일함). 다음 예를 고려하십시오.
public class Animal { void consume(int a) { System.out.println(a+' consumed!!'); } static void consume(int a) { System.out.println('consumed static '+a); } public static void main (String args[]) { Animal a = new Animal(); a.consume(10); Animal.consume(20); } }
산출
Animal.java:7: error: method consume(int) is already defined in class Animal static void consume(int a) ^ Animal.java:15: error: non-static method consume(int) cannot be referenced from a static context Animal.consume(20); ^ 2 errors
75) main() 메소드를 오버로드할 수 있나요?
예, 메소드 오버로딩을 사용하면 Java 프로그램에 여러 개의 기본 메소드를 가질 수 있습니다.
자세한 내용은.76) 유형 승격을 통한 메소드 오버로딩이란 무엇입니까?
유형별 승격은 메서드 오버로드입니다. 즉, 정확히 일치하는 항목이 없으면 한 데이터 형식이 암시적으로 다른 데이터 형식으로 승격될 수 있습니다.
위 다이어그램에 표시된 대로 바이트는 short, int, long, float 또는 double로 승격될 수 있습니다. short 데이터 유형은 int, long, float 또는 double로 승격될 수 있습니다. char 데이터 유형은 int, long, float 또는 double 등으로 승격될 수 있습니다. 다음 예를 고려하십시오.
class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } }지금 테스트해보세요
산출
40 60
77) 다음 Java 프로그램의 출력은 무엇입니까?
class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } }
산출
OverloadingCalculation3.java:7: error: reference to sum is ambiguous obj.sum(20,20);//now ambiguity ^ both method sum(int,long) in OverloadingCalculation3 and method sum(long,int) in OverloadingCalculation3 match 1 error
설명
같은 이름, 즉 sum으로 정의된 두 가지 메서드가 있습니다. 첫 번째 방법은 정수 및 long 유형을 허용하는 반면 두 번째 방법은 long 및 정수 유형을 허용합니다. 전달된 매개변수는 a = 20, b = 20입니다. 정수 리터럴과 긴 리터럴 사이에 명확한 구분이 언급되어 있지 않기 때문에 어떤 메서드가 호출될지 알 수 없습니다. 이것이 모호성의 경우이다. 따라서 컴파일러는 오류를 발생시킵니다.
핵심 Java - OOP 개념: 인터뷰 질문을 재정의하는 메소드
78) 메소드 재정의란 무엇입니까?
하위 클래스가 상위 클래스에서 이미 제공한 메서드의 특정 구현을 제공하는 경우 이를 메서드 재정의라고 합니다. 런타임 다형성과 인터페이스 메소드 구현에 사용됩니다.
메소드 재정의 규칙
- 메서드의 이름은 상위 클래스의 이름과 동일해야 합니다.
- 메서드에는 상위 클래스와 동일한 시그니처가 있어야 합니다.
- 두 클래스 사이에는 IS-A 관계가 있어야 합니다.
79) 정적 메서드를 재정의할 수 있나요?
아니요. 정적 메서드는 개체가 아니라 클래스의 일부이기 때문에 재정의할 수 없습니다.
80) 왜 정적 메서드를 재정의할 수 없나요?
정적 메서드는 클래스의 일부이고 클래스와 바인딩되는 반면 인스턴스 메서드는 개체와 바인딩되어 정적은 클래스 영역에서 메모리를 가져오고 인스턴스는 힙에서 메모리를 가져오기 때문입니다.
81) 오버로드된 메서드를 재정의할 수 있나요?
예.
82) 메소드 오버로딩과 오버라이딩의 차이점.
메소드 오버로딩 | 메소드 재정의 |
---|---|
1) 메소드 오버로딩은 프로그램의 가독성을 높입니다. | 메서드 재정의는 해당 슈퍼클래스에서 이미 제공한 메서드의 특정 구현을 제공합니다. |
2) 클래스 내에서 메소드 오버로딩이 발생합니다. | 메서드 재정의는 IS-A 관계가 있는 두 클래스에서 발생합니다. |
3) 이 경우에는 매개변수가 달라야 합니다. | 이 경우 매개변수는 동일해야 합니다. |
83) 개인 메서드를 재정의할 수 있나요?
아니요, 프라이빗 메서드의 범위는 클래스로 제한되어 있고 클래스 외부에서는 액세스할 수 없기 때문에 프라이빗 메서드를 재정의할 수 없습니다.
84) 하위 클래스에서 재정의된 메서드의 범위를 변경할 수 있나요?
예, 하위 클래스에서 재정의된 메서드의 범위를 변경할 수 있습니다. 그러나 메소드의 접근성을 줄일 수는 없다는 점에 유의해야 합니다. 메소드의 접근성을 변경하는 동안 다음 사항에 주의해야 합니다.
- 개인은 보호, 공개 또는 기본값으로 변경할 수 있습니다.
- 보호된 항목을 공개 또는 기본값으로 변경할 수 있습니다.
- 기본값은 공개로 변경할 수 있습니다.
- 대중은 항상 공개 상태로 유지됩니다.
85) 서브클래스에서 이를 재정의하면서 슈퍼클래스 메소드의 throws 절을 수정할 수 있습니까?
예, 슈퍼클래스 메소드의 throws 절을 수정하면서 서브클래스에서 이를 재정의할 수 있습니다. 그러나 예외 처리의 경우 재정의하는 동안 따라야 할 몇 가지 규칙이 있습니다.
- 상위 클래스 메서드가 예외를 선언하지 않는 경우 하위 클래스 재정의 메서드는 확인된 예외를 선언할 수 없지만 확인되지 않은 예외는 선언할 수 있습니다.
- 슈퍼클래스 메서드가 예외를 선언하는 경우 하위 클래스 재정의 메서드는 동일하거나 하위 클래스 예외를 선언하거나 예외를 선언할 수 있지만 상위 예외는 선언할 수 없습니다.
86) 다음 Java 프로그램의 출력은 무엇입니까?
class Base { void method(int a) { System.out.println('Base class method called with integer a = '+a); } void method(double d) { System.out.println('Base class method called with double d ='+d); } } class Derived extends Base { @Override void method(double d) { System.out.println('Derived class method called with double d ='+d); } } public class Main { public static void main(String[] args) { new Derived().method(10); } }
산출
Base class method called with integer a = 10
설명
method()는 Base 클래스에서 오버로드되는 반면, double 유형을 매개변수로 사용하여 Derived 클래스에서 파생됩니다. 메서드 호출에서는 정수가 전달됩니다.
87) 자바에서 가상 기능을 가질 수 있나요?
예, Java의 모든 기능은 기본적으로 가상입니다.
88) 공변 반환 유형이란 무엇입니까?
이제 java5부터는 서브클래스 오버라이딩 메소드의 반환 타입이 서브클래스 타입인 경우 반환 타입을 변경하여 어떤 메소드든 오버라이드하는 것이 가능해졌습니다. 이를 공변 반환 유형이라고 합니다. 공변 반환 유형은 반환 유형이 하위 클래스와 동일한 방향으로 달라질 수 있음을 지정합니다.
class A{ A get(){return this;} } class B1 extends A{ B1 get(){return this;} void message(){System.out.println('welcome to covariant return type');} public static void main(String args[]){ new B1().get().message(); } }지금 테스트해보세요
Output: welcome to covariant return type자세한 내용은.
89) 다음 Java 프로그램의 출력은 무엇입니까?
class Base { public void baseMethod() { System.out.println('BaseMethod called ...'); } } class Derived extends Base { public void baseMethod() { System.out.println('Derived method called ...'); } } public class Test { public static void main (String args[]) { Base b = new Derived(); b.baseMethod(); } }
산출
Derived method called ...
설명
Base 클래스의 메서드, 즉 baseMethod()는 Derived 클래스에서 재정의됩니다. Test 클래스에서 참조 변수 b(Base 클래스 유형)는 Derived 클래스의 인스턴스를 참조합니다. 여기서 런타임 다형성은 Base 클래스와 Derived 클래스 사이에서 달성됩니다. 컴파일 타임에 Base 클래스에서 baseMethod 메소드의 존재 여부를 확인합니다. 만약 존재한다면 컴파일된 프로그램은 그렇지 않으면 컴파일러 오류가 표시됩니다. 이 경우 baseMethod는 Base 클래스에 있습니다. 따라서 성공적으로 컴파일되었습니다. 그러나 런타임 시 Derived 클래스에 의해 baseMethod가 재정의되었는지 확인하고, 그렇다면 Derived 클래스 메서드가 호출되고 그렇지 않으면 Base 클래스 메서드가 호출됩니다. 이 경우 Derived 클래스는 baseMethod를 재정의합니다. 따라서 Derived 클래스 메서드가 호출됩니다.
핵심 Java - OOP 개념: 최종 키워드 인터뷰 질문
90) 최종 변수는 무엇입니까?
Java에서는 최종 변수를 사용하여 사용자가 업데이트하는 것을 제한합니다. 최종 변수를 초기화하면 해당 값을 변경할 수 없습니다. 즉, 최종 변수는 한 번 값에 할당되면 그 이후에는 절대 변경할 수 없다고 말할 수 있습니다. 어떤 값에도 할당되지 않은 최종 변수는 클래스 생성자를 통해서만 할당될 수 있습니다.
class Bike9{ final int speedlimit=90;//final variable void run(){ speedlimit=400; } public static void main(String args[]){ Bike9 obj=new Bike9(); obj.run(); } }//end of class지금 테스트해보세요
Output:Compile Time Error자세한 내용은.
91) 마지막 방법은 무엇입니까?
어떤 메소드를 최종 메소드로 변경하면 이를 재정의할 수 없습니다. 자세한 내용은.
class Bike{ final void run(){System.out.println('running');} } class Honda extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda honda= new Honda(); honda.run(); } }지금 테스트해보세요
Output:Compile Time Error
92) 마지막 수업은 무엇인가요?
클래스를 최종으로 만들면 해당 클래스를 하위 클래스로 상속할 수 없습니다.
final class Bike{} class Honda1 extends Bike{ void run(){System.out.println('running safely with 100kmph');} public static void main(String args[]){ Honda1 honda= new Honda1(); honda.run(); } }지금 테스트해보세요
Output:Compile Time Error자세한 내용은.
93) 마지막 빈변수는 무엇인가요?
선언 시 초기화되지 않은 최종 변수를 최종 공백 변수라고 합니다. 마지막 공백 변수를 직접 초기화할 수는 없습니다. 대신 클래스 생성자를 사용하여 초기화해야 합니다. 이는 사용자가 다른 사람이 변경해서는 안 되는 일부 데이터(예: PAN 번호)를 가지고 있는 경우에 유용합니다. 다음 예를 고려하십시오.
class Student{ int id; String name; final String PAN_CARD_NUMBER; ... }자세한 내용은.
94) 마지막 빈 변수를 초기화할 수 있나요?
예, 정적이 아닌 경우 생성자에서 초기화할 수 있습니다. 정적 공백 최종 변수인 경우 정적 블록에서만 초기화할 수 있습니다. 자세한 내용은.
95) 메인 메소드를 최종 메소드로 선언할 수 있나요?
예, main 메서드를 public static final void main(String[] args){}로 선언할 수 있습니다.
96) 다음 Java 프로그램의 출력은 무엇입니까?
class Main { public static void main(String args[]){ final int i; i = 20; System.out.println(i); } }
산출
20
설명
i는 빈 최종 변수이기 때문입니다. 한 번만 초기화할 수 있습니다. 20으로 초기화하였습니다. 따라서 20이 출력됩니다.
97) 다음 Java 프로그램의 출력은 무엇입니까?
class Base { protected final void getInfo() { System.out.println('method of Base class'); } } public class Derived extends Base { protected final void getInfo() { System.out.println('method of Derived class'); } public static void main(String[] args) { Base obj = new Base(); obj.getInfo(); } }
산출
Derived.java:11: error: getInfo() in Derived cannot override getInfo() in Base protected final void getInfo() ^ overridden method is final 1 error
설명
getDetails() 메서드는 최종 메서드입니다. 따라서 하위 클래스에서는 재정의할 수 없습니다.
98) 생성자를 최종으로 선언할 수 있나요?
생성자는 상속되지 않으므로 final로 선언할 수 없습니다. 생성자는 일반적인 메서드가 아닙니다. 그러므로 생성자를 final로 선언하는 것은 의미가 없습니다. 그러나 그렇게 하려고 하면 컴파일러에서 오류가 발생합니다.
99) 인터페이스를 최종 인터페이스로 선언할 수 있나요?
아니요, 정의를 제공하려면 일부 클래스에서 인터페이스를 구현해야 하기 때문에 인터페이스를 최종으로 선언할 수 없습니다. 따라서 인터페이스를 최종적으로 만드는 것은 의미가 없습니다. 그러나 그렇게 하려고 하면 컴파일러에서 오류가 표시됩니다.
100) 최종 방법과 추상 방법의 차이점은 무엇입니까?
최종 메서드와 추상 메서드의 주요 차이점은 추상 메서드는 정의를 제공하기 위해 하위 클래스에서 재정의해야 하기 때문에 최종 메서드가 될 수 없다는 것입니다.