IT CookBook JAVA 마스터/연습문제

IT CookBook JAVA 마스터 Ch.09 연습문제

은행털이 2023. 12. 11. 03:39

01. 객체지향 프로그래밍에서 사용자에게 필요한 기능만 표시하는 데 사용되는 개념은 무엇인가?

캡슐화

추상화

동적 바인딩

상속

 

02. 다음 중 추상 클래스의 올바른 구문은 무엇인가?

abstract class 클래스명 { 처리내용; }

abstract 클래스명 { 처리내용; }

abstract class { 처리내용; }

abstract class Classname [] { 처리내용; }

 

03. 다음 중 추상 클래스에 대한 설명으로 옳지 않은 것은 무엇인가?

abstract 키워드로 선언된다.

abstract 메서드를 포함할 수도 있고 포함하지 않을 수도 있다.

인스턴스화 할 수 있다.

final 메서드가 포함되어 있다.

 

04. 인터페이스에서 클래스를 선언하려면 어떤 접근제한자를 사용해야 하는가?

Private

Protected

Public

앞의 보기 모두 가능

 

05. 다음 중 인터페이스의 올바른 구문은 무엇인가?

interface 클래스명 { public void 메서드명(); }

interface class 클래스명 { public void 메서드명(); }

interface 클래스명 { { private class 메서드명 (); }

interface 클래스명 { { public void 메서드명() { 처리내용; } }

 

06. 다음 중 추상 클래스가 포함된 프로그램은 무엇인가?

// 1번
class A { method(); }
class B extends A { method(); }
class Main { }

 

// 2번
interface A { method(); }
class B implements A { method(); }
class Main { }

// 3번 정답
abstract class A { method(); }
class B extends A { method(); }
class main { }

 

// 4번
interface A { method(); }
class B implements A { method(); }
class C extends B { method(); } class Main { }

 

 

07. 다음 프로그램을 실행하면 오류가 발생하는 이유는 무엇인가?

abstract class Example {
	void displayText() {};
}

class Demo extends Example {
	void method() {
		System.out.println("method() 메서드 실행");
	}
}

public class MyClass {

	public static void main(String[] args) {
		Demo e = new Demo();
		e.method();
	}
}

출력문에 오류가 있다.

객체 생성에 오류가 있다.

추상 클래스에 포함된 메소드를 확장클래스에서 구현하지 않았다.

프로그램에 오류가 없다.

-> 추상클래스 내부에 추상메소드가 아닌 일반 메소드만 있으므로 Demo 클래스에서는 딱히 구현할게 없어 오류가 없다.

 

08. 다음 프로그램을 실행하면 어디서 오류가 발생하는가?

abstract class Sample {
	abstract void method();
}

class First extends Sample {
	abstract void method() {
		System.out.println("First abstract method");
	}
}

public class MyClass {

	public static void main(String[] args) {
		Sample object = new First();
		object.method();
	}
}

Sample 클래스

First클래스의 추상메서드

MyClass 클래스의 main() 메서드

오류가 없다

-> 추상메서드가 존재하려면 무조건 추상 클래스여야만 한다.

 

09. 다음 프로그램의 실행 결과는 무엇인가?

interface Methods {
	public void funciton();
}

class Calculate implements Methods {

	public void funciton(int l, int b) {
		int area = l * b;
		System.out.println(area);
	}
	
}

public class MyClass {

	public static void main(String[] args) {
		Calculate c = new Calculate();
		c.funciton(5, 10);
	}
}

50

area

l * b

컴파일 오류

-> 문제의 의도는 Calculate 클래스에서 function을 인터페이스에 따라 구현할 때 인터페이스에는 파라미터가 존재하지 않지만 구현하는 부분은 int l, int b의 파라미터가 생겨서 인터페이스 규칙을 따르지않아 컴파일 오류가 발생하는 것을 유도한 것 같다. 하지만 @Override가 없으면 자바는 오버라이드하는 메서드인지 검사하지 않기때문에 Calculate의 function이 오버로드되어 50이 정상적으로 출력된다.

 

10. 다음 프로그램의 실행 결과는 무엇인가?

abstract class One {
	abstract void calculate(int a);
}

class Two extends One {
	void calculate(int a) {
		System.out.println(a + a);
	}
}

class Three extends One {
	void calculate(int a) {
		System.out.println(a * a);
	}
}

public class MyClass {

	public static void main(String[] args) {
		One obj1 = new Two();
		obj1.calculate(2);
		One obj2 = new Three();
		obj2.calculate(2);
	}
}

4 4

a+a a*a

2 2

컴파일 오류