답 - 3. 인터페이스는 인스턴스 필드를 가질 수 있다.
해설 - 인터페이스는 상수 필드와 메소드 필드만 존재할 수 있다.
답 - 4. 구현 객체를 인터페이스 타입으로 변환하려면 강제 타입 변환을 해야 한다.
해설 - 애초에 구현 객체는 인터페이스를 구현하려고 implements를 하고있기 때문에 인터페이스 타입에 매칭이 된다. 그래서 강제 타입 변환을 할 필요가 없다.
public interface Soundable{
String sound();
}
SoundableExample 클래스에서 printSound() 메소드는 Soundable 인터페이스 타입의 매개변수를 가지고 있습니다. main() 메소드에서 printSound()를 호출할 때 Cat과 Dog 객체를 주고 실행하면 각각 "야옹"과 "멍멍"이 출력되도록 Cat과 Dog 클래스를 작성해보라.
public class SoundableExample{
private static void printSound(Soundable soundable){
System.out.println(soundable.sound());
}
public static void main(String[] args){
printSound(new Cat());
printSound(new Dog());
}
}
답 -
Cat.java
public class Cat implements Soundable{
@Override
public String sound(){
return "야옹";
}
}
Dog.java
public class Dog implements Soundable{
@Override
public String sound(){
return "멍멍";
}
}
해설 - Example의 printSound에서 System.out.println(soundable.sound());
을 수행하기 때문에 문자열만 return 해주면 야옹과 멍멍을 출력해주기 때문에 String 반환값에 야옹과 멍멍을 할당해주었다.
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 class MySqlDao implements DataAccessObject{
@Override
public void select() {
System.out.println("mysql에서 검색");
}
@Override
public void insert() {
System.out.println("mysql에서 삽입");
}
@Override
public void update() {
System.out.println("mysql에서 수정");
}
@Override
public void delete() {
System.out.println("mysql에서 삭제");
}
}
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에서 검색");
}
@Override
public void insert() {
System.out.println("mysql에서 삽입");
}
@Override
public void update() {
System.out.println("mysql에서 수정");
}
@Override
public void delete() {
System.out.println("mysql에서 삭제");
}
}
public interface Action{
void work();
}
ActionExample 클래스의 main() 메소드에서 Action의 익명 구현 객체를 만들어 다음과 같은 실행 결과가 나올 수 있도록 박스 안에 들어갈 코드를 작성하세요. 실행결과 ==> 복사를 합니다.
public class ActionExample{
public static void main(String[] args){
Action action = //빈칸
action.work();
}
}
답 -
new Action() {
public void work() {
System.out.println("복사를 합니다.");
}
}