Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발새발

#다형성 #추상화 #final #인터페이스 본문

자바

#다형성 #추상화 #final #인터페이스

개발하는후추 2022. 7. 27. 23:33

다형성

  • 하나의 객체가 여러 가지 형태를 가질 수 있다
  • 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 하는것

상의 클래스의 타입의 참조변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 한다

*참조변수가 사용할 수 있는 멤버의 개수는 실제 객체의 멤버 개수보다 같거나 적어야한다

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
Comments