개발새발
#다형성 #추상화 #final #인터페이스 본문
다형성
- 하나의 객체가 여러 가지 형태를 가질 수 있다
- 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 하는것
상의 클래스의 타입의 참조변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 한다
*참조변수가 사용할 수 있는 멤버의 개수는 실제 객체의 멤버 개수보다 같거나 적어야한다
class Car {
public void aa() {
System.out.println("나는 자동차”);
}
}
class Audi extends Car{
@Override
public void aa() {
System.out.println("나는 아우디.”);
}
}
class Benz extends Car {
@Override
public void aa() {
System.out.println("나는 벤츠”);
}
}
public class FriendTest {
public static void main(String[] args) {
Car gen = new Car(); // 객체 타입과 참조변수 타입의 일치
Audi A8 = new Audi();
Car s_class = new Bez(); // 객체 타입과 참조변수 타입의 불일치
상위클래스 타입의 참조변수를 시용했다
gen.aa();
A8.aa();
s_class.aa();
}
}
장점 1. 코드의 중복을 줄여 편리하고 효과적으로 프로그래밍 할 수 있다
참조변수의 타입 변환
사용할 수 있는 멤버의 개수를 조절하는것
조건
1. 서로 상속관계에 있는 상위 클래스 - 하위클래스 사이에만 타입변환이 가능
2. 하위 클래스 타입에서 상위클래스 타입으로 타입변환(업케스팅)은 형변환 연산자(괄호)를 생략 할 수 있음
3. 반대로 상위클래스에서 하위클래스 타입으로 변환(다운캐스팅)은 형변환 연산자(괄호)를 반드시 명시
참조변수의 타입변환은 서로 상속 관계에 있는 관계에서는 양방향으로 자유롭게 수행될 수 있으나,
상위 클래스로의 타입 변환이냐(타입 변환 연산자 생략 가능) 아니면 하위 클래스로의 타입 변환이냐(타입 변환 연산자 생략 불가)에 따라서 약간의 차이가 있음
instanceof 연산자
캐스팅이 가능한 지 여부를 boolean타입으로 확인할 수 있는 문법
A instanceof B 는 A가 B의 친구나 자식이냐 묻는건데
animal instanceof Bat은 animal은 Bat의 엄마이기때문에 false
참조_변수 instanceof 타입
public class InstanceOfExample {
public static void main(String[] args) {
Animal animal = new Animal();
System.out.println(animal instanceof Object); //true
System.out.println(animal instanceof Animal); //true
System.out.println(animal instanceof Bat); //false
Animal cat = new Cat();
System.out.println(cat instanceof Object); //true
System.out.println(cat instanceof Animal); //true
System.out.println(cat instanceof Cat); //true
System.out.println(cat instanceof Bat); //false
}
}
class Animal {};
class Bat extends Animal{};
class Cat extends Animal{};
abstract 추상화
- 자바에서는 ‘미완성’ 이라고 표현
- abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용해야 한다
- 사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것
- 기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만드는 것
장점
- 추상 클래스를 하면 상속을 받는 하위 클래스에서 오버라이딩을 통해 각각 상황에 맞는 메서드 구현이 가능
- 공통된 속성과 기능임에도 불구하고 각각 다른 변수와 메서드로 정의되는 경우 발생할 수 있는 오류를 방지
final
- final 제어자가 추가되면 해당 대상은 더 이상 변경이 불가하고, 확장되지 않는 성질을 지님
위치 의미
클래스 변경 또는 확장 불가능한 클래스, 상속 불가
메서드 오버라이딩 불가
변수 값 변경이 불가한 상수
final class FinalEx { // 확장/상속 불가능한 클래스
final int x = 1; // 변경되지 않는 상수
final void getNum() { // 오버라이딩 불가한 메서드
final int localVar = x; // 상수
return x;
}
}
인터페이스
- 서로 다른 두 시스템 장치, 소프트웨어 따위를 서로 이어 주는 부분 또는 그런 접속 장치
- 어떤 두 대상 간의 연결 내지 소통을 돕는 중간 가교 역할
- 추상클래스보다 더 높은 추상성을 가지고 있다
- 오직 추상 메서드와 상수만을 멤버로 가질 수 있고 다른 어떤 요소도 포함될 수 없다
역할
- 어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드를 구현해야 한다
추상화 VS 인터페이스
인터페이스는 클래스가 아닌 인스턴스라는 고유한 형태를 가지고 있는 반면 추상 클래스는 일반적인 클래스다
인터페이스는 구체적인 로직이나 상태를 사지고 있을 수 없고, 추상 클래스는 구체적인 로직이나 상태를 가지고 있을 수 있다
'자바' 카테고리의 다른 글
복습 (0) | 2022.07.27 |
---|---|
배운걸로 혼자 코드 짜보기 (0) | 2022.07.27 |
#생성자 (0) | 2022.07.27 |
#클래스#객체#객체지향언어 (0) | 2022.07.27 |
#자바 기초 (0) | 2022.07.27 |