동물 클래스
abstract class 동물 {
abstract void 소리내기();
abstract void 이동하기();
}
동물 인터페이스
interface 비행할수있는 {
void 날기();
}
interface 수영할수있는 {
void 헤엄치기();
}
class 새 extends 동물 implements 비행할수있는 {
void 소리내기() {
System.out.println("짹짹");
}
void 이동하기() {
System.out.println("날기");
}
void 날기() {
System.out.println("날아다니다");
}
}
class 물고기 extends 동물 implements 수영할수있는 {
void 소리내기() {
System.out.println("물보다는 소리가 안나지요!");
}
void 이동하기() {
System.out.println("헤엄치기");
}
void 헤엄치기() {
System.out.println("헤엄치다");
}
}
1)상속 받을 클래스들이 공통으로 가지는 메소드와 필드가 많아 중복 멤버 통합을 할 때
중복되는 멤버를 통합 해주는 기능은 본래 추상 클래스의 기능이라기 보단 그냥 클래스의 기능이라고 하는게 옳다.다만 같은 추상화 개념인 인터페이스와 차이점을 두기 위해, 상수 밖에 정의 못하는 인터페이스에서는 할 수 없는 기능이 추상 클래스 중복 멤버 통합이라고 보면 된다.
중복되는 멤버를 통합 해주는 기능은 본래 추상 클래스의 기능이라기 보단 그냥 클래스의 기능이라고 하는게 옳다.다만 같은 추상화 개념인 인터페이스와 차이점을 두기 위해, 상수 밖에 정의 못하는 인터페이스에서는 할 수 없는 기능이 추상 클래스 중복 멤버 통합이라고 보면 된다.
출처:
https://inpa.tistory.com/entry/JAVA-☕-인터페이스-vs-추상클래스-차이점-완벽-이해하기
[Inpa Dev 👨💻:티스토리]

class NewlecExam {
int kor; // 중복되는 멤버
int eng; // 중복되는 멤버
int math; // 중복되는 멤버
int com;
void total(){} // 중복되는 멤버
void avg(){} // 중복되는 멤버
}
class YBMExam{
int kor; // 중복되는 멤버
int eng; // 중복되는 멤버
int math; // 중복되는 멤버
int toeic;
void total(){} // 중복되는 멤버
void avg(){} // 중복되는 멤버
}

abstract class Exam {
int kor;
int eng;
int math;
abstract void total();
abstract void avg();
}
class NewlecExam extends Exam {
int com;
void total(){}
void avg(){}
}
class YBMExam extends Exam {
int toeic;
void total(){}
void avg(){}
}
