Abstract & Interface

jyKim·2023년 1월 27일
0

Java

목록 보기
3/3
post-thumbnail
  • abstract
    • 의미 그대로 추상적으로 정의된 클래스로, 하나 이상의 추상 메소드를 가지고 있는 클래스이다.
    • 추상 메소드, 일반 메소드, 멤버 필드, 생성자를 정의할 수 있다.
    • 추상 메소드는 내용을 정의할 수 없다. 즉 선언부만 존재한다.
    • 추상 클래스를 상속하는 자식 클래스에서 부모가 가진 모든 메소드를 오버라이딩 해야한다.
    • extends로 상속받으며 다중 상속이 불가하다.
    • init
  • interface

    • interface는 추상 메소드와 상수만을 멤버로 가질 수 있다.
    • abstract 보다 추상화 정도가 높아 추상 클래스와 달리 몸통을 갖춘 일반 메소드, 멤버 변수를 구성원으로 가질 수 없다.
    • 모든 멤버 변수는 public static final 이어야하며, 생략 가능하다.
    • 모든 메소드는 public abstract 이어야하며, 생략 가능하다.
    • 인터페이스는 인터페이스로부터만 상속받을 수 있으며, 다중 상속이 가능하다.
    • init
  • interface vs abstract

    • Interface는 상속 관계에 얽메이지 않고 공통 기능이 필요할 때, abstract mehod를 정의해 놓고 구현(implements)하는 클래스에서 각 기능들을 재정의(Overriding)하여 여러 형태로 구현할 수 있기에 다형성과 연관되어 있다.
    • Interface는 해당 Interface를 구현하는 Class들에 대해 동일한 method 동작을 강제하기 위해 존재한다.
    • Abstract Class는 상속 관계에서 같은 부모 Class를 상속받는 자식 Class들 간에 공통 기능을 각각 구현하고 확장시키기에 상속과 관련되어 있다.
    • Abstract Class → IS - A “~이다”
    • Interface → HAS - A “~을 할 수 있는”
    • 동물과 식물은 생물이다 → Abstract Class
    • 말할 수 있는(Talkable), 먹을 수 있는(Eatable) → Interface
  • Casting

    • 캐스팅이란 타입을 변환하는 것
    • 자바의 상속 관계에 있는 부모 자식간에는 서로 간의 형변환이 가능하다.
    • 업캐스팅 → 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것
    • 다운캐스팅 → 부모 클래스 객체가 자식 클래스 타입으로 형변환 되는 것, 업캐스팅 된 것을 다시 원상태로 돌리는 것을 말한다.
    • 다운캐스팅을 할 때는 타입을 명시적으로 지정해줘야 한다.
      • ex) Student s = (Student)p;
    • example
      class Person{
      	String name;
      	Person(String name){
      		this.name = name;
      	}
      }
      
      class Student extends Person{
      	String check;
      	Student(String name){
      		super(name);
      	}
      }
      
      public class Main{
      	public static void main(String[] args){
      		Student s = new Student("홍길동");
      		Person p = s;	// 업캐스팅
      		p.name = "이름이다.";
      
      		p.check = "컴파일 에러 발생";	// 컴파일 에러 발생
      	}
      }
      
      public class Main{
      	public static void main(String[] args){
      		Person p = new Student("홍길동");
              
      		Student s = (Student)p;	// 다운캐스팅
      		s.name = "김유신";
      		s.check = "check!";
      	}
      }
  • Object

    • Java의 최상위 클래스로서 자바의 모든 클래스는 Object 클래스를 상속받는다. 즉, 모든 클래스의 부모(조상) 클래스가 된다.
    • 모든 클래스가 공통적으로 제공해야 할 메소드를 담고 있다.

Reference

profile
백엔드애옹

0개의 댓글