확인문제
- 인터페이스에 대한 설명으로 틀린 것은 무엇입니까?
- ① 인터페이스로 객체(인스턴스)를 생성할 수 있다.
- ② 인터페이스는 다형성의 주된 기술로 사용된다.
- ③ 인터페이스를 구현한 객체는 인터페이스로 동일하게 사용할 수 있다.
- ④ 인터페이스를 사용함으로써 객체 교체가 쉬워진다.
정답: ① (인터페이스는 추상적이므로 직접 객체 생성이 불가능하다.)
- 인터페이스의 구성 멤버에 대한 설명으로 틀린 것은 무엇입니까?
- ① 인터페이스는 인스턴스 필드가 없고 상수를 멤버로 가진다.
- ② 추상 메소드는 구현 클래스가 재정의해야 하는 멤버이다.
- ③ 디폴트 메소드는 구현 클래스에서 재정의할 수 없다.
- ④ 정적 멤버는 구현 객체가 없어도 사용할 수 있는 멤버이다.
정답: ③ (디폴트 메소드는 구현 클래스에서
public을 붙여 재정의할 수 있다.) - 인터페이스 다형성에 대한 설명으로 틀린 것은 무엇입니까?
- ① 필드가 인터페이스 타입일 경우 다양한 구현 객체를 대입할 수 있다.
- ② 매개변수가 인터페이스 타입일 경우 다양한 구현 객체를 대입할 수 있다.
- ③ 배열이 인터페이스 타입일 경우 다양한 구현 객체를 저장할 수 있다.
- ④ 구현 객체를 인터페이스 타입으로 변환하려면 강제 타입 변환을 해야 한다.
정답: ④ (자동 타입 변환됨)
- 인터페이스 A를 B와 C가 구현하고 B를 상속해서 D 클래스를, C를 상속해서 E 클래스를 만들었습니다. 다음 빈칸에 들어올 수 있는 것을 모두 선택하세요.
// 인터페이스 A
interface A {}
// 메소드 선언
void method(A a) { ... }
// 메소드 호출
method( _____ );
- ①
new C() - ②
new E() - ③
new B() - ④
new D()
정답: ①, ②, ③, ④ (모두 가능)
- TV 클래스를 실행했을 때 “TV를 켰습니다.” 라고 출력되도록 밑줄과 박스에 들어갈 코드를 작성해 보세요.
public interface Remocon {
public void powerOn();
}
public class TV implements Remocon {
@Override
public void powerOn() {
System.out.println("TV를 켰습니다.");
}
public static void main(String[] args) {
Remocon r = new TV();
r.powerOn();
}
}
Soundable인터페이스는 다음과 같은sound()추상 메소드를 가지고 있습니다.SoundableExample클래스의printSound()메소드는 매개변수 타입으로Soundable인터페이스를 가집니다.printSound()를 호출할 때Cat과Dog객체를 주고 실행하면 각각 “야옹”과 “멍멍”이 출력되도록Cat과Dog클래스를 작성해 보세요.
public interface Soundable {
public String sound();
}
public class SoundableExample {
public static void printSound(Soundable soundable) {
System.out.println(soundable.sound());
}
public static void main(String[] args) {
printSound(new Cat());
printSound(new Dog());
}
}
정답:
public class Cat implements Soundable {
@Override
public String sound() {
return "야옹";
}
}
public class Dog implements Soundable {
@Override
public String sound() {
return "멍멍";
}
}
DaoExample클래스의main()메소드에서dbWork()메소드를 호출할 때OracleDao와MySqlDao객체를 매개값으로 주고 호출했습니다.dbWork()메소드는 두 객체를 모두 매개값으로 받기 위해DataAccessObject타입의 매개변수를 가지고 있습니다. 실행 결과를 보고DataAccessObject인터페이스와OracleDao,MySqlDao구현 클래스를 각각 작성해 보세요.
public class DaoExample {
public static void dbWork(DataAccessObject dao) {
dao.select();
dao.insert();
dao.update();
dao.delete();
}
public static void main(String[] args) {
dbWork(new OracleDao());
dbWork(new MySqlDao());
}
}
DataAccessObject.java
public interface DataAccessObject {
void select();
void insert();
void update();
void delete();
}
OracleDao.java
public class OracleDao implements DataAccessObject {
@Override
public void select() { System.out.println("Oracle DB에서 검색"); }
@Override
public void insert() { System.out.println("Oracle DB에 삽입"); }
@Override
public void update() { System.out.println("Oracle DB를 수정"); }
@Override
public void delete() { System.out.println("Oracle DB에서 삭제"); }
}
MySqlDao.java
public class MySqlDao implements DataAccessObject {
@Override
public void select() { System.out.println("MySql DB에서 검색"); }
@Override
public void insert() { System.out.println("MySql DB에 삽입"); }
@Override
public void update() { System.out.println("MySql DB를 수정"); }
@Override
public void delete() { System.out.println("MySql DB에서 삭제"); }
}
- 다음과 같이 인터페이스와 클래스가 선언되어 있습니다.
action()메소드를 호출할 때 매개값이C객체일 경우에만method2()가 호출되도록 밑줄에 들어갈 코드를 작성해 보세요.
public interface A {
public void method1();
}
public class B implements A {
@Override
public void method1() {
System.out.println("B - method1()");
}
}
public class C implements A {
@Override
public void method1() {
System.out.println("C - method1()");
}
public void method2() {
System.out.println("C - method2()");
}
}
public class Example {
public static void action(A a) {
a.method1();
if (_______________) {
c.method2();
}
}
public static void main(String[] args) {
action(new B());
action(new C());
}
}
정답: a instanceof C c
서브목차