Java Basic: instanceof-final-Interface
접근명시자의 종류
- private : 자기자신 이외의 모든 클래스로부터 보호한다.
- public : 외부의 모든 클래스에게 접근을 허용한다.
- protected : 외부의 다른 클래스로부터는 보호하되 상속받은 자식 클래스들에게는 접근을 허용한다.
- 디폴트 : 접근명시자를 아무것도 적지 않는 것을 말함. 외부의 다른클래스들에게는 접근을 허용하지 않고, 같은 패키지내의 클래스들에게 접근을 허용한다. ==> friendly
추상메소드와 추상클래스
어떠한 클래스를 만들때 미래에 만들어지는 자식클래스들이 가져야할 공통적인 속성과 동작들을 모아서 부모클래스를 만들 수 있다. 후손 클래스들이 가져야 할 속성과 동작들을 “일반화 한다”라고 한다.
또, 어떤 클래스가 추상클래스로부터 상속받았다면 그 추상클래스내의 모든 추상메소드를 오버라이딩 해야 한다.
추상클래스라고 하는 것은 body가 구체화되지 않은 메소드를 포함하고 있기 때문에 추상클래스의 객체는 생성할 수 없다.
lang.math
Math.PI 이렇게 사용가능 PI는 Math클래스의 필드 static으로 정의되어있기 떄문에 객체생성 없이 사용 가능 ->클래스.PI 로 사용가능
instance of 연산자
어떠한 객체가 특정 클래스의 자료형인지 판별하기 위한 연산자이다.
for(shape s :arr){
if(s instanceof TwoDimShape){ //s가 TwoDimShape형인가?
((TwoDimShape)s).getArea();
}
System.out.println(s);
}
클래스 이름 바꾸기
이클립스에서 클래스이름을 변경하고자 할 때 ==> package Explorer 에서 바꾸고자 하는 클래스명을 선택하고 마우스 오른쪽단추 ->Refacter ->Rename 을 한 후 이름 변경할 것
예상 질문
-
추상클래스에 대하여 설명하시오. ->body가 구체화 되지 않는 추상메소드를 포함하고 잇는 클래스를 말하며 일반 속성과 메소드를 포함할 수 있다. 추상클래스의 객체는 생성할 수 없다.
-
추상메소드에 대해 설명하시오. -> 미래에 자식클래스들이 가져야 할 속성과 동작을 일반화 함에 있어 어떠한 메소드를 부모클래스를 만드는 시점에서 구체화 할 수 없으나 반드시 자식클래스들은 그 메소드를 가져야 하고 자식클래스들이 반드시 오버라이딩 해야할 때에 이러한 메소드는 메소드를 구체화 하지 않고 메소드 선언부만 적어 추상메소드로 만든다. 추상메소드임을 나타내기 위하여 abstract 키워드를 붙여야 한다.
일반적으로 어떤 클래스의 멤버변수는 필요에 따라 값이 변경될 수 있다.
일반적으로 어떤 클래스를 확장하여 새로운 클래스를 만들 수 있다.
일반적으로 상속관계에 있을때 부모의 메소드가 자식클래스에게 알맞지 않으면 오버라이딩 할 수 있다.
final
-
클래스의 멤버변수이름 앞에 final 변수이기는 하지만 정해진 값 이외의 다른 값으로 바꾸지 못하게 한다. ==>”상수” “hello” <-문자열 데이터도 상수 final은 일반적으로 static과 함께 쓴다.(메모리 절약)
-
클래스의 멤버메소드이름 앞에 final 상속 관계에 있는 자식클래스에게 오버라이딩 금지
-
클래스의 클래스이름 앞에 final 클래스의 상속 금지
예상 질문
- final 키워드에 대해 설명하시오. -> final 키워드는 클래스의 멤버변수명 앞에, 메소드명 앞에, 클래스명 앞에 올 수 있다. 변수명 앞에 final은 변하지 않는 상수를 만들기 위함이며, 보통 static 변수로 만들어 사용한다. 메소드명 앞에 final은 상속관계에 있을때 오버라이딩 금지를 위하여 사용하며 클래스명 앞에 final은 그 클래스의 상속을 금지하기 위하여 사용한다.
**final 변수는 다른 일반 속성과 구별하기 위한 용도로 보통 모두 대문자로 만든다!
ex) Math.PI Integer.MAX_VALUE Integer.MIN_VALUE
다중상속
자바에서는 클래스의 다중상속이 금지되어 있다. -> 자바에서는 다중상속의 효과를 기대할 목적으로 인터페이스를 사용한다.
Interface
인터페이스도 새로운 자료형의 개념이다.
interface 인터페이스이름{
}
그러나 인터페이스는 “완전추상”의 개념으로 1)상수 2)추상메소드만으로 구성되어야 한다.
완전추상이기 때문에 인터페이스 안에서 변수명앞에 따로 final을 붙이지 않아도 자동 final이며 메소드 이름 앞에 abstract를 붙이지 않아도 자동 abstract이다.
인터페이스의 자식클래스를 인터페이스를 구현한다고 한다.
인터페이스를 구현하는 클래스는 다음과 같이 표현한다.
class 자식클래스이름 implements 부모인터페이스이름{
}
class A{
}
interface B{
}
class C extends A implements B{
//A클래스를 상속받고 B인터페이스를 구현하는 C클래스
}
이때 C는 B 인터페이스 안에 있는 모든 메소드를 오버라이딩 해야한다.
class A{
}
interface B{
}
interface K{
}
class C extends A implements B, K{
}
클래스의 상속은 하나밖에 안되지만, 인터페이스의 구현은 얼마든지 가능하다. C는 B,K인터페이스의 모든 메소드들을 오버라이딩 해야 한다.