어떤클래스가 있을때 클래스가 가지고 잇는 변수와 메소드를 확장,상속해서 다른 클래스가 갖도록 하는것
재사용성, 유지보수, 가독성 향상 코드의 양 줄이기가능
class Cal{
public int sum(int v1, int v2) {
return v1+v2;
}
}
class Cal3 extends Cal{
}
public class InheritanceApp {
public static void main(String[] args) {
Cal c = new Cal();
System.out.println(c.sum(2, 1));
Cal3 c3 = new Cal3();
System.out.println(c3.sum(2, 1));
}
}
extends를 사용하면 확장, 상속하여 사용 가능
부모클래스에 없는 기능을 추가하기 -> Overriding 이라고 한다. 상속이 존재하는 근본적인 이유
class Cal{
public int sum(int v1, int v2) {
return v1+v2;
}
}
class Cal3 extends Cal{
public int minus(int v1, int v2) {
return v1-v2;
}
// Overriding : 덮어쓰다
public int sum(int v1, int v2) {
System.out.println("Cal3!!");
return v1+v2;
}
}
public class InheritanceApp {
public static void main(String[] args) {
Cal c = new Cal();
System.out.println(c.sum(2, 1));
Cal3 c3 = new Cal3();
System.out.println(c3.sum(2, 1));
System.out.println(c3.minus(2, 1));
System.out.println(c3.sum(2, 1));
}
}
Overriding : 부모클래스 위에 올라타서 덮어쓰기 -> 재정의
Overloading : 과적하다, 너무 많이 탑재하다, 상속과 상관 없다.
자바는 같은 이름의 메소드를 여러개 과적할 수 있다. 어떻게? 형태만 다르면
class Cal{
public int sum(int v1, int v2) {
return v1+v2;
}
}
class Cal3 extends Cal{
public int minus(int v1, int v2) {
return v1-v2;
}
// Overriding : 덮어쓰다
public int sum(int v1, int v2) {
System.out.println("Cal3!!");
return v1+v2;
}
// Overloading
public int sum(int v1, int v2, int v3) {
return v1+v2+v3;
}
}
this : 자기자신
super : 자신의 부모
class Cal{
public int sum(int v1, int v2) {
return v1+v2;
}
// Overloading
public int sum(int v1, int v2, int v3) {
return this.sum(v1,v2)+v3;
}
}
class Cal3 extends Cal{
public int minus(int v1, int v2) {
return v1-v2;
}
// Overriding : 덮어쓰다
public int sum(int v1, int v2) {
System.out.println("Cal3!!");
return super.sum(v1, v2);
}
}
super는 부모 클래스를 계승 발전, this는 자기 자신을 호출하여 계승
생성자 : 메소드명이 클래스명과 동일하고 리턴 자료형이 없는 메소드
객체변수에 값을 무조건 설정해야만 객체가 생성될 수 있도록 강제하는 방법
class Cal{
int v1, v2;
Cal(int v1, int v2){
this.v1 = v1; this.v2 = v2;
System.out.println("Cal init!!");
}
public int sum() {return this.v1+v2;}
}
class Cal3 extends Cal{
Cal3(int v1, int v2) {
super(v1, v2);
System.out.println("Cal3 init!!");
}
public int minus() {return this.v1-v2;}
}
public class InheritanceApp {
public static void main(String[] args) {
Cal c = new Cal(2,1);
Cal3 c3 = new Cal3(2,1);
System.out.println(c3.sum()); //3
System.out.println(c3.minus()); //2
}
}
다음으로 공부할 주제
질서 정연한 혼돈은 자유다.
이것들은 규제라고 볼 수 있다.