1. Java 기초 다지기 (7-1)
1.오버로딩
public class Day7_a_1 {
void sum() { // 메서드 선언만 있음
}
public static void func() { // 메서드 선언부
// + = 메서드 정의부
// 메서드 구현부
}
public static void func(String name) {
// 오버로딩의 조건 1. 식별자(메서드명) 동일
// 2. 인수(타입)가 다르다
// 3. 인수의 갯수가 다르다.
}
// public static int func(String name) {
// 반환형만 달라서는 오버로딩이 안된다.
//
// }
// public static int func(String name) throws Exception {
// 반환형,throws만 달라서는 오버로딩이 안된다.
//
//}
public static void func(String name,int age) {
}
public static void func(int age) {
}
// 오버로딩과 상관없는 것들 다 지워보자.
// func();
// func(String;)
// func(String,int);
// func(int); 4가지
// 메서드 사인 (Method Signature)
// 메서드의 실행: 1. 컴파일타임에 승인. 2. 승인을 받고 Runtime에 실행.
// 오버로딩 = 다형성. 주어진 심벌 또는 조건에 따라 서로다른 연산을 수행함.
public static void main(String[] args) {
// main메서드는 static. 클래스 멤버임. 클래스명.~ 으로 사용함.
// this 참조 못함. 인스턴스 참조 못함
func();
func("홍길동");
func("홍길동",21);
func(21);
//func(21.0); 승인 못받음. 컴파일안됌.
}
}
2.오버라이딩
class Upper {
public void func() { // 상위 클래스의 메서드 선언만을 물려받고
System.out.println("Call Upper:func()");
}
}
class Sub extends Upper{
public void func() {
System.out.println("Call Sub:func()");
// 하위클래스의 메서드 구현을 실행함. -> 오버라이딩
}
}
public class Day7_a_2 {
public static void main(String[]args) { //-------------method영역---------------//
Sub obj = new Sub(); //-------upper----//----sub----------//
obj.func(); // func() // func() //
// 하위 클래스에서 func() 재정의함.
// obj는 Sub클래스 타입. obj.func() Sub클래스의 func()호출
Upper obj2 = new Sub(); // * 메서드 실행 단계 1.컴파일 승인 2. 런타임 실행
obj2.func(); // (타입을 보고)
} // (Upper에 func()있는 것보고 승인) (하위 클래스에 있는 재정의된 func() 실행)
// (메서드 재정의)
}
// 다형성 : 1. 오버로딩 2. 오버라이딩
class Father{ // 객체관계도: Father
public void dosomething() { // |
System.out.println("Call Father:dosomething"); // --------------
// | |
// Son Child
}
}
class Son extends Father{
public void dosomething() {
System.out.println("Call Son:dosomething");
}
}
class Child extends Father{
public void dosomething() {
System.out.println("Call Child:dosomething");
}
}
public class Day7_a_3 {
public static void main(String[]args) {
Father obj = new Son();
Father obj2 = new Child();
obj.dosomething(); //1. Father클래스의 dosomething보고 승인 2. Son 클래스의 dosomething 실행
obj2.dosomething(); // (객체 타입을 보고 승인) (인스턴스를 보고 실행)
// 오버라이딩 = 다형성
// 오버로딩 : 달리는 열차를 위에서 본다.
// 오버라이딩 : 달리는 열차를 뒤에서 본다.
}
}
감사합니당🐷🐷🐷