자바 스터디
클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성된다.
즉, 필드(field)란 클래스에 포함된 변수(variable)를 의미한다.
또한, 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있다.
현실 세계에서 부모님이 자식들에게 재산을 물려주는 것과 비슷하다.
상속받는 클래스를 자식 클래스, 하위 클래스 또는 서브 클래스라고 부른다.
상속을 해주는 클래스를 부모 클래스, 상위 클래스 또는 슈퍼 클래스라고 한다.
public class Parent { // 부모 클래스
private int x;
private int y;
public Parent() {}
public Parent(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
//getter, setter
public void printParent() {
System.out.println("부모");
}
}
public class Child1 extends Parent { // 부모 클래스를 상속받는 자식1 클래스
private int z;
public Child1() {}
public Child1(int x, int y, int z) {
super(x, y);
this.z = z;
}
public int getZ() {
return z;
}
public void setZ(int z) {
this.z = z;
}
public void printChild1() {
System.out.println("첫 번째 자식");
}
}
public class Child2 extends Parent{ // 부모 클래스를 상속받는 자식2 클래스
private int n;
public Child2() {}
public Child2(int x, int y, int n) {
super(x, y);
this.n = n;
}
public int getN() {
return n;
}
public void setN(int n) {
this.n = n;
}
public void printChild2() {
System.out.println("두 번째 자식");
}
}
인터페이스란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미한다.
자바에서 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있다.
하지만 인터페이스(interface)는 오로지 추상 메소드와 상수만을 포함할 수 있다. 그리고 인터페이스는 다중상속이 가능하다.
클래스와는 달리 인터페이스의 모든 필드는 public static final이어야 하며, 모든 메소드는 public abstract이어야 한다.
인터페이스 선언은 다음과 같다.
접근제어자 interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
...
public abstract 메소드이름(매개변수목록);
...
}
오버로딩(Overloading) : 같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술
-메서드의 이름은 같고
-매개변수의 개수나 타입이 다른 함수를 정의하는 것이다
//test 호출
void test(){
System.out.println("매개변수 없음")
}
//test에 매개변수 int형 2개 호출
void test(int a, int b){
System.out.println("매개변수 "+a+"랑"+b);
}
//test에 double형 1개 호출
void test(double c){
System.out.println("매개변수 "+c);
}
public class OverloadingEx{
public static void main(String[] args){
OverloadingEx ov = new OverloadingEx();
//test()호출
ov.test();
//test(int a, int b)호출
ov.test(1,2)'
//test(double c)호출
ov.test(50);
//test(double c)호출
ov.test(50.5);
->실행결과
매개변수 없음
매개변수 1랑 2
매겨변수 50.0
매겨변수 50.5
> 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용
- 상위 클래스의 메서드를 하위 클래스가 재정의 하는 것
- 메서드의 이름,파라미터의 개수, 타입이 동일해야 하며,
- 주로 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 사용된다.
class Parent {
void example() { System.out.println("부모 클래스의 example() 메소드"); }
}
class Child extends Parent {
void example() { System.out.println("자식 클래스의 example() 메소드"); }
}
public class OverrideEx {
public static void main(String[] args) {
Parent pa = new Parent();
pa.example();
Child ch = new Child();
ch.example();
Parent par = new example();
par.example();
}
}
->실행결과
부모 클래스의 example() 메소드
자식 클래스의 example() 메소드
자식 클래스의 example() 메소드