N스크린하이브리드앱과정/JAVA

[2주][4일][5~7교시] JAVA: 접근지정자 final, 추상클래스와 인터페이스

광천스러움 2013. 7. 25. 19:02

★ 접근지정자 final

오늘은 앞에서 배운 static 말고 다른 접근지정자인 "final"에 대해 실습하고자 한다.

 

멤버변수의 접근지정 실습

1. FinalTest, FinalTest2 클래스를 각각 만들어 준다.

 

2. a의 값을 20으로 변경해준 후 출력해본다.

 

3. 정상적으로 값이 변경되는 것을 알 수 있다.

 

4. 멤버변수에 접근지정자 final을 지정한다.

 

5. a값을 20으로 변경하려고 하니, 오류가 출력된다.

 

 

6. 이번에는 메서드에 final 접근지정자를 설정해본다.

 

7. FinalTest2 클래스에서 오버라이딩을 하려하자, 오류가 났다.

 

8. 마지막으로 클래스에 final을 지정해보자.

 

9. 아예 상속을 못하게 막아준 것을 아래 그림을 통해 알 수 있다.

 

 

 

★ 추상클래스와 인터페이스

차이점

 

인터페이스 - 추상메서드만 존재.

추상클래스 - 일반메서드도 존재(추상메서드+일반메서드).

 

 

*추상클래스 실습(1)

추상클래스의 실습을 한번 해보자

 

1. Abstractclass 추상 클래스를 만든다. 사용법은 class 앞에 "abstract"를 붙여주면 된다.

 

2. 추상클래스는 객체를 생성할 수 없다.

3. 또한 자식클래스를 만들 때, 상속이 끝난 Subclass2에 오류가 난다. 왜?

    오버라이딩을 해주지 않았기 때문이다.

 

4. 오버라이드 옵션(alt+shift+s+v)에 들어가 method2()를 체크한체로 확인을 누른다.

 

5. 오버라이딩을 해주니, 오류가 사라지는 것을 볼 수 있다.

 

6. 서브클래스의 객체를 생성한 후, 메서드를 출력하면

 

7. 아래의 결과가 출력된다.

 

 

*추상클래스 실습(2)

문제

 

클래스 만들기

 

메인 메서드

 

결과

 

 

 

*인터페이스 간단한 실습(개념)

1. 아래 그림과 같이 클래스와 인터페이스를 만든다.

 - 클래스: Class1, Class2

 - 인터페이스: Inter1, Inter2, Inter3

 

2. SubClass4라는 클래스를 만들고, Class1과 Class2를 한꺼번에 상속하려 하였다. 결과는? 안된다.

    클래스는 다중상속이 불가능하다!

3. 이번엔 SubClass 클래스를 만들고 Inter1,Inter2를 한꺼번에 상속해보았다. 결과는? 된다!

    인터페이스는 다중상속이 가능하다!

 

4. 위 3번은, 클래스에서 인터페이스를 부모로 둘 수 있었다. 그러니 당연히 인터페이스끼리도 부모와 자식을 둘 수 있다!

 

5. subclass6클래스 안에서 세개의 메소드를 한거번에 오버라이딩할 수 있다. 왜일까?

    부모인터페이스 Inter3이 앞에서 Inter1, Inter2를 모두 상속했기 때문이다!

 

 

 

 

*인터페이스 - 실습(2)

1. IHello라는 이름의 인터페이스를 만든다.

    인터페이스는 다양한 접근지정자를 생략 가능하다.

   (1) 멤버변수 : public static final 생략 가능

   (2) 메서드 : public abstract 생략 가능

 

2. SubClass3 서브클래스를 만들고 오버라이딩을 한다.

 

3. 메인 메서드에서 RED를 출력해본다.

    RED값을 10으로 변경해보았지만, 오류가 난다. 왜일까?

    --> interface는 객체 생성이 되지않기 때문이다.

          더, 들어가자면, 인터페이스 안쪽에 "final"이 생략되어 있는데, 이 final이 멤버변수를 수정하지

          못하게 만든다.

 

4. 메인 메서드에서 아래 그림과 같이 코딩을 작성한다.

    서브클래스의 인스턴스 s를 생성한 뒤, 다음 3가지를 실행한다.

    1. 인터페이스 안에 있는 RED 멤버변수 <--인터페이스를 부모에 두고 상속이 가능하다!

    2. sayHello()메서드

    3. sayGoodBye()메서드 <--2,3번은 자기 클래스에 있으므로 출력은 당연!

그 다음, 부모 인터페이스의  i인스턴스를 생성한 경우,

부모 인터페이스에 void sayHello();가 있는데, 이게 서브클래스로 가서 오버라이딩된 sayHello()메서드를 출력한다!(이걸 "강제 오버라이딩"이라고도 한다). 뒤에 sayGoodBye()메서드도 마찬가지다!

void sayHello(); <--- 구현자가 없는 껍데기!

 

5. 아래 그림과 같은 결과가 나온다.

 

 

 

*인터페이스 - 실습(3)

아래의 문제를 보고 실제로 코딩해보자.

정답은 목록을 펼치면 된다.

 

<정답>

1. 인터페이스와 클래스

 

2. 메인 메서드(설명 첨부)

 

결과

 

 

*인터페이스 응용 - 실습(4)

아래의 문제를 보고 실제로 코딩해보자.

여기서는 조금 응용해서 생성자 오버라이딩을 수행해야 한다!

[정답]

1. 추상클래스와 서브클래스. 일반메서드와 추상메서드의 출력

 

2. 메인 메서드