출처: 자바의 정석 chapter 07 객체지향 프로그래밍2 p345~400
클래스 1)객체를 만드는 틀
2)하위클래스의 공통점을 모아둔 것
final class: 변경될 수 없는 클래스.객체를 만드는 틀로서만 기능함
->그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.
+final 메서드: 변경될 수 없는 메서드. final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없음.
+final 멤버변수,지역변수: 변수 앞에 final이 붙으면 값을 변경할 수없는 상수가 된다.
abstract 클래스 :클래스 내에 추상 메서드가 선언되어 있음을 의미함. 하위클래스의 공톰점 모아두는 것 만 가능함
-추상클래스 사용법: class 앞에 abstract를 붙이기만 하면 됨.
abstract class 추상클래스{
}
이렇게 하면 이 클래스를 사용할 때, 클래스 선언부의 abstract를 보고 이 클래스에는 추상 메서드가 있으니 상속을 통해 구현해주어야 한다는 것을 알 수 있음.
추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해주어야 한다.
+abstract 메서드: 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알림.
사용예시
abstract class Animal{
abstract void cry();
}
class Cat extends Animal{
void cry(){
System.out.println("냐옹냐옹!");
}
}
interface: 모든 메서드가 추상메서드여서 하위클래스의 공통점을 모아두는 것만 가능함.
추상클래스와의 공통점: 추상메서드를 갖는다. 객체 생성을 할 수 없다.
추상클래스와의 차이점: 추상클래스(abstract 클래스)보다 추상화 정도가 높아서 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.
추상클래스=부분적으로만 완성된 미완성 설계도
인터페이스=구현된 것은 아무것도 없고 밑그림만 그려져 있는 기본 설계도
-인터페이스의 장점
1. 개발시간을 단축시킴
2. 표준화가 가능함
3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있음
4. 독립적인 프로그래밍이 가능함
생활코딩 인터페이스로 계산기 만들기 협업한 예시
출처 : https://opentutorials.org/course/1223/6063
//1.계산기에 대한 약속을 정의하는 인터페이스
public interface Calculatable {
public void setOprands(int first, int second, int third);
public int sum();
public int avg();
}
//2.인터페이스를 구현한 가짜 클래스를 임시로 사용해 만든 애플리케이션
class CalculoatorDummy implement Calculatable{
public void setOprands(int first, int second, int third){
}
public int sum(){
return 60;
}
public int avg(){
return 20;
}
}
public class CalculatorConsumer{
public static void main(String[]args){
CalculatorDummy c = new CalculatorDummy();
c.setOprands(10,20,30);
System.out.println(c.sum()+c.avg());
}
}
//3.인터페이스에 따라 구현된 클래스
class Calculator implements Calculatable{
int first, second, third;
public void setOprands(int first, int second, int third){
this.first=first;
this.second=second;
this.third=third;
}
public int sum(){
return this.first + this.second + this.third;
}
public int avg(){
return (this.first + this.second +this.third)
}
}
//4.가짜 클래스인 CalculatorDummy를 실제 로직으로 교체
public class CalculatorConsumer{
public static void main(String[] args){
Calculator c = new Calculator();
c.setOprands(10,20,30);
Systmem.out.println(c.sum()+c.avg());
}
}
추상클래스보다 인터페이스를 많이 사용하는 추세임.