추상적 : 어떤일을 해야할지 정해지지 않음.
구체적 : 어떤 일을 해야할지 명확하게 정의
추상메서드 : 설계
공통메서드(인스턴스 메서드) : 하위 클래스가 공유할 자원
추상 클래스는 인스턴스로 생성할 수 없다.
추상 클래스에서 구현하는 메서드
내가 이해한 추상클래스를 사용하는 이유!
상위클래스보다 하위클래스가 더 많은 수행할 수 있다. 상위클래스에서 무엇을 하는지가 중요하지가 않고 여러 하위클래스들이 각각 어떤일을 하는지가 더 중요하다.
그렇기 떄문에 상위클래스에서는 공통으로 사용할수있는 틀을 추성적으로 정의함으로서 하위클래스는 그 틀을가지고 구체적으로 무엇을 해야할지를 정의한다.
구현된 메서드 : 하위 클래스에서 공통으로 사용할 구현 코드, 하위 클래스에서 재정의할 수도 있음.
추상 메서드 : 하위 클래스가 어떤 클래스냐에 따라 구현 코드가 달라짐
추상 클래스는 하위에 구현된 여러 클래스를 하나의 자료형(상위 클래스 자료형)으로 선언하거나 대입할 수 있습니다. 추상 클래스에 선언된 메서드를 호출하면 가상 메서드에 의해 각 클래스에 구현된 기능이 호출됩니다.
즉, 하나의 코드가 다양한 자료형을 대상으로 동작하는 다형성을 활용할 수 있습니다.
public abstract class Calculator {
public abstract int add(int n1, int n2);
}
- - - - - - - - - - - - - - - - - - - - - -
public class HighSchoolStudent extends Student{
//Student stu =new Student(15,"김정훈");
public HighSchoolStudent(){
super(15,"이름"); //super는 상위클래스를 생성하기떄문에 상위클래스의 생성자 매개변수를 지정해야함
}
@Override
public String toString() {
return "HighSchoolStudent{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
Calculator
public abstract class Calculator {
int num = 10;
public abstract int add(int n1, int n2);
}
------------------------------------
SimpleCalculator
package exam05;
public class SimpleCalculator extends Calculator{
@Override
public int add(int n1, int n2) {
return n1+n2;
}
}
------------------------------------
Ex01
package exam05;
public class Ex01{
public static void main(String[] args) {
Calculator cal = new SimpleCalculator();
int result = cal.add(10, 20);
System.out.println(result);
System.out.println(cal.num);
}
}