Java_기초_Day7_1

임정민·2022년 10월 27일
0

언어공부

목록 보기
8/10
post-thumbnail

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. 오버라이딩

  1. 상속관계에서 메서드
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();   //          (객체 타입을 보고 승인)             (인스턴스를 보고 실행)
	    // 오버라이딩 = 다형성
	    
	    // 오버로딩 : 달리는 열차를 위에서 본다.
	    // 오버라이딩 : 달리는 열차를 뒤에서 본다.  
	    
	}	
	
	
}

감사합니당🐷🐷🐷

profile
https://github.com/min731

0개의 댓글