Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Firebase
- Exception
- MySQL
- css
- FLUTTER
- R프로그래밍
- Java
- jQuery
- Android Apk
- java error
- Android Apk 이름 변경
- DataTable
- spring
- tomcat
- android fragment
- CSS사용법
- apache gzip
- fragment
- Kotlin
- html
- android error
- 안드로이드
- Program type already present
- error
- Android Apk 이름
- JavaScript
- release Apk
- Eclipse
- release unsigned
- Android
Archives
- Today
- Total
selfstarter
JAVA 추상클래스, 인터페이스 공통점, 차이점(abstract, interface) 본문
추상클래스, 인터페이스 공통점, 차이점
추상클래스(abstract)
- 추상클래스는 일반적인 class에 추상함수를 멤버 변수로 갖는 class를 말한다(추상함수가 없어도 에러가 나지 않지만 꼭 목적에 맞게 쓰자)
- 추상클래스는 객체로 생성할 수 없다. 오로지 상속으로만 구현이 가능하다
- 객체로 생성할 수 없으므로 현실에서 확실하게 정해지지 않는 것을 추상클래스로 만들어야 한다.(이론은 이런데.. 실제 개발에서는 용도에 따라서 자유롭게 사용가능할 듯)
- 추상클래스는 class이므로 extends 로 상속받는다(다중상속x)
- 멤버 변수, 함수, 생성자 선언 및 구현이 가능하다
- class 맨 앞에 abstract 키워드를 붙여야 한다
- 추상함수는 선언부만 있고 구현부는 존재하지 않는다
- 추상함수는 리턴 값 앞에 abstract 키워드를 붙여야 한다
- 추상함수를 선언하지 않아도 에러는 나지 않는다
public class Main {
public static void main(String[] args) {
Student student = new Student("kinStudent", 15, "중학교", "사람중학교");
Employee employee = new Employee("kimEmplooy", 30, "회사컴퍼니", 5000);
student.doing();
employee.doing();
student.goHome();
employee.goHome();
}
abstract public static class Person {
private String name;
private int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public abstract void doing();
public void goHome() {
System.out.println(this.getClass().getSimpleName()+" go home!");
}
}
public static class Student extends Person {
private String type;
private String schoolName;
Student(String name, int age, String type, String schoolName) {
super(name, age);
this.type = type;
this.schoolName = schoolName;
}
public void doing() {
System.out.println(this.getClass().getSimpleName()+" study!");
}
}
public static class Employee extends Person {
private String companyName;
private int salary;
Employee(String name, int age, String companyName, int salary) {
super(name, age);
this.companyName = companyName;
this.salary = salary;
}
public void doing() {
System.out.println(this.getClass().getSimpleName()+" work");
}
}
}
인터페이스(interface)
- 인터페이스는 확장의 개념이 아닌 동일한 기능을 가지고 있다는 개념
- 인터페이스는 객체로 생성할 수 없다. 오로지 상속으로만 구현이 가능하다
- 다중상속이 가능하다
- 인터페이스는 interface로 선언하고 implements 키워드로 상속받는다
- 인터페이스는 선언부만 있고 구현부는 없다
public interface TV {
public void on();
public void off();
}
public interface CCTV {
public void cctvOn();
public void cctvOff();
}
public class oldTv implements TV {
@Override public void on() {}
@Override public void off() {}
}
public class IPTV implements TV, CCTV {
@Override public void on() {}
@Override public void off() {}
public void cctvOn() {}
public void cctvOff() {}
}
추상클래스와 인터페이스 공통점
- 객체로 생성할 수 없다
- 상속을 통해서 구현부가 없는 함수를 정의해야한다
추상클래스와 인터페이스 차이점
- 추상클래스는 다중상속이 불가능하고, 인터페이스는 다중상속이 가능하다
- 추상클래스는 abstact 키워드를 사용해서 선언하고 인터페이스는 interface 키워드를 사용해서 선언한다
- 추상클래스는 상속 사용 시 extends를 사용하고 인터페이스는implements 키워드를 사용한다
- 추상클래스는 부모 class의 기능을 물려받아 자식 class에서 알맞게 확장해서 만든다.또 일반 클래스와 달리 추상메소드를 강제적으로 만들게 하는 장점이 있다.(계층구조, 부모 자식 관계)
- 인터페이스는 공통된 기능을 추출한 틀을 상속받는 것이다.(인터페이스 상속 객체를 사용하는 클래스는 해당 인터페이스를 상속받은 객체가 무엇인지 전혀 알 필요 없다. 어떤 객체가 들어오는지 신경쓰지 않아도 된다. 그저 같은 기능이 있다는 것을 알고 기능을 호출만 하면 된다)
'Server > Java' 카테고리의 다른 글
JAVA ChoiceFormat (0) | 2020.01.07 |
---|---|
JAVA Wrapper class (0) | 2020.01.07 |
자바 프로그램 실행 시간 구하기(System.currentTimeMillis()) (0) | 2019.12.30 |
이클립스 code coverage 툴 EclEmma (0) | 2019.12.27 |
JAVA DecimalFormat (0) | 2019.11.01 |
Comments