오버라이딩이란? 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것 부모 클래스의 메서드 선언부와 같아야 한다. 오버라이딩하면 기존과 다른 기능으로 구현할 수 있다. 자동 타입 변환되면 부모 클래스나 인터페이스의 메서드가 호출되지만, 오버라이딩된 메서드가 있으면 오버라이딩된 메서드가 호출된다. @Override 기재는 필수일까? 컴파일 시 강력한 체크를 위해 어노테이션을 기재하는 게 좋다고 생각한다. 하지만 어노테이션을 기재하지 않아도 코드는 실행된다. 코드 상 오류가 있을 때, 컴파일 에러 없이 의도와 다르게 실행되는 건 함정...😨 코드로 살펴보기 @Override ❌ 아래 예시의 본래 의도는 Child 클래스의 오버라이딩한 hello()를 호출하는 것이다. 하지만 매개 변수 String name의..
인터페이스가 가지고 있는 객체 지향의 특징 캡슐화, 추상화, 다형성, 상속성 모두를 가지고 있다고 생각한다. Why? 캡슐화 인터페이스를 구현한 구현 객체를 통해 필드와 메서드를 캡슐화할 수 있다. 추상화 공통적인 속성을 뽑아 인터페이스의 추상 메서드로 표현하고, 구체적인 속성은 구현 클래스에서 추상 메서드를 오버라이딩해서 구현할 수 있다. 다형성 인터페이스를 구현한 구현 객체는 인터페이스 타입으로 자동 타입 변환할 수 있기 때문에 다양한 결과를 만들 수 있다. 상속성 인터페이스는 extends 할 수 있다. 추상 클래스와는 다르게 다중으로 상속이 가능하다. 인터페이스와 인터페이스를 구현하는 구현 클래스 관계 자체가 상속 관계라 볼 수 있다.
객체 지향의 4가지 특징 캡슐화 객체의 필드와 메서드를 은닉하는 것 불필요한 접근을 방지할 수 있다. 데이터의 잘못된 변경을 방지할 수 있다. public class Person { private String name; private int age; public Person(String name, int age) { if(name != null) { this.name = name; } if(age >= 0) { this.age = age; } } public void eat() { System.out.prinlt("음식을 먹다."); } public void sleep() { System.out.prinln("잠을 자다."); } } 추상화 공통적인 것을 뽑아낸 것 ex) 소리를 내다(추상적) 꽥꽥 소리..