클래스 형변환
- 부모타입으로 자식객체를 참조하였을 때, 자식객체의 메소드나 속성을 사용하려면 클래스 형변환을 해야한다.
- 부모타입으로 자식객체를 참조할 때 묵시적 형변환
- 자식타입으로 부모객체를 참조할 때 명시적 현변한
public class Car{
public void engine(){
System.out.println("Car의 메소드");
}
}
public class Bus extends Car{
public void sound(){
System.out.println("빵빵.");
}
}
public class BusExam{
public static void main(String args[]){
Car car = new Bus();
car.engine();
//car.sound(); // 컴파일 오류 발생
Bus bus = (Bus)car; //부모타입을 자식타입으로 형변환
bus.engine();
bus.sound();
}
}
인터페이스(interface)
definition
-An interface in Java is a blueprint of a class. It has static constants and abstract methods.(쉽게 말해서 클래스를 어떻게 구성해야하는지에 관한 설계도면이다.
-The interface in Java is a mechanism to achieve abstraction(추상화를 이루기 위한 메커니즘)
characteristics
Let's figure out characteristics about 'Interface' in Java through examples
interface A{
public void a():
}
//implements는 해당 클래스가 인터페이스를 구현한다는 의미.구현하려면 interface의 메소드를 무조건 포함하고 있어야한다.
class B implements A {
public void a();
}
- 구현하는 클래스는 인터페이스의 메소드를 반드시 포함해야한다(강제성을 지님)
- 하나의 클래스가 여러개의 인터페이스를 구현할 수 있다.
- 인터페이스도 상속이 가능하다
- 인터페이스는 추상메서드와 상수만 가질 수 있다.
- 인터페이스도 참조형이 될 수 있다. ex) TV라는 interface와 remote라는 class(implements해주는)가 있을 때 TV tv = new remote();로 객체화가 가능하다.
왜 그렇게 중요할까 ?
예시를 보며 알아보자
public interface TV{
public int MAX_VOLUME = 100;
public int MIN_VOLUME = 0;
public void turnOn();
public void turnOff();
public void changeVolume(int volume);
public void changeChannel(int channel);
}
public class LedTV implements TV{
public void on(){
System.out.println("켜다");
}
public void off(){
System.out.println("끄다");
}
public void volume(int value){
System.out.println(value + "로 볼륨조정하다.");
}
public void channel(int number){
System.out.println(number + "로 채널조정하다.");
}
}
//메소드에서 System.out.println();을 통해 어떤 값을 출력해낼게 아니라면
//return을 통해서 값을 돌려주는 방법도 있다
public class LedTVExam{
public static void main(String args[]){
TV tv = new LedTV();
tv.on();
tv.volume(50);
tv.channel(6);
tv.off();
}
}
//여기서 TV종류가 LED뿐만 아니라 LCD가 추가되어야할 때, interface에 이미 구현해야할 메소드들이 선언되어 있기 때문에
//class에서 해당 메소드가 어떻게 행동해야하는지에 대해서만 추가해주면 훨씬 더 코드가 깔끔해진다.
- 다른 클래스(예시로 LCDTV)에 대한 코드를 작성할 때, interface에 작성된 메소드에 대해서 어떻게 행동해야하는지만 정의내려준다면 훨씬 더 편리해진다.
what is the difference between an interface and abstract class?
- interface는 일종의 계약(contract)이다. interface를 작성한 사람이 "나 이렇게 할게" 라고 한다면 interface를 사용하는 사람은 "그러면 이 방식대로 클래스를 작성할게".
- interface의 메소드는 body부분이 없다. interface는 아무 것도 홀로 할 수 없고 패턴일 뿐이다.
- abstract classs는 행동(메소드)를 정의내릴 수 있다. > 메소드 오버라이딩을 통해 부모클래스의 메소드를 자식클래스에서 재정의 가능하다 .
*본 게시물은 프로그래머스<자바입문>강의를 복습하며 작성한 글입니다.
'JAVA' 카테고리의 다른 글
JAVA-(2022.05.10)-interface의 static 메소드 (0) | 2022.05.10 |
---|---|
JAVA(2022.05.09)- interface의 default메소드 (0) | 2022.05.09 |
JAVA(2022.05.07)-추상클래스, super와 부모생성자, 오버라이딩 (0) | 2022.05.07 |
JAVA(20220.05.05)-변수의 범위와 static, enum, 생성자 (0) | 2022.05.05 |
JAVA(2022.05.04)- class,String클래스,field, 메소드 (0) | 2022.05.04 |