본문 바로가기

JAVA/상속

JAVA(2022.05.06)-this,메소드오버로딩,패키지,상속

this

 

this를 통해 생성자 및 메서드에서 생성된 인스턴스의 필드 데이터에 접근 가능

    public class Car{
        String name;
        int number;

        public Car(String n){
            name = n;
        }
    }
    
        public Car(String name){
        name = name;
    }
    
    
        public Car(String name){
        this.name = name;               
    }
    
    
   this를 통해 생성자의 매개변수인 name을 필드 name의 값으로 준다. 
   즉 매개변수의 값을 필드에 대입하라는 의미가 된다

 

메소드 오버로딩

 

- 매개변수의 유형과 개수를 다르게 해서 같은 이름의 메소드를 여러 개 가질 수 있게 하는 기술이다

 

why?

- 더하기 기능을 진행시키는 메소드가 있다고 생각해보자. 정수 a,b를 더하는 메소드. 실수 c,b를 더하는 메소드. 문자열 A,B를 더하는 메소드. 이 메소드를 각각 정의하여 사용하는 것보다 하나의 메소드. add 메소드를 선언하고 오버로딩을 통해 구현하는 것이 코드의 중복을 피할 수 있게 한다. 

 

ex)

 

    class MyClass2{
        public int plus(int x, int y){
            return x+y;
        }

        public int plus(int x, int y, int z){
            return x + y + z;
        }

        public String plus(String x, String y){
            return x + y;
        }
    }
    
        public int plus(int i, int f){
        return i+f;
    }
    public MethodOverloadExam{
        public static void main(String args[]){
            MyClass2 m = new MyClass2();    
            //인스턴스화
            
            System.out.println(m.plus(5,10));
            System.out.println(m.plus(5,10,15));
            System.out.println(m.plus("hello" + " world"));
        }
    }

이렇게 plus 메소드 하나에 다른 매개변수를 받게 함으로써 더욱 간편하게 호출할 수 있다. 

 

 

패키지(package)

 

-클래스를 관리하기 위해 만드는 일종의 폴더개념이다 

-클래스 이름이 동일해도 패키지가 다르면 다른 클래스로 인식한다. 

 

다른 패키지 속의 클래스를 사용하고 싶다면? > import문을 통해 패키지를 가져와라 

 

*주의사항*

두 개의 패키지가 import된 상황에서 이름이 같은 클래스를 사용하려고 할 때 컴파일러가 구분을 할 수 없으므로

객체화 시 , 

패키지이름.클래스이름.인스턴스화할 이름

으로 객체를 선언해야한다. 

ex)

import 패키지1
import 패키지2

public class 실험 {
    public static void main(String[] args){
        패키지1.첫클래스.1번 = new 패키지1.첫클래스.1번();
        패키지2.첫클래스.2번 = new 패키지2.첫클래스.2번();
        
    }
}
// 첫클래스라는 이름의 클래스가 두 패키지에 모두 선언되어있고
// 패키지1,2 모두 import 되어있을 때 오류방지를 위해서

 

 

상속

  • 부모클래스의 속성을 자식클래스의 속성에 물려주는 것 > 즉, 부모클래스의 메소드를 자식클래스에서 선언없이 사용이 가능하다 
  • 형식 > ex) public class son extends father{ }
  • 자바는 다중상속이 불가능하기 때문에 하나의 클래스만 상속할 수 있다

코드예시

ex) 

 

public class mom{
	public string cute(){
    	System.out.println("귀엽다");
    }
}

mom 클래스의 cute메소드

 

public class jun extends mom{

	public void smart(){
    	System.out.println("똑똑해");
    }
    
}

jun 클래스의 smart 메소드 

 

public class exam{
	public static void main(String args[]){
    	jun junseo = new jun;
        junseo.cute;
        junseo.smart;
        }
}

output will be 

귀엽다

똑똑해

 

즉, 부모의 필드와 메소드를 사용가능하게 만드는 것이 상속이다 ! 

위 줄에서 부모의 필드가 나왔는데, 원하는대로 사용가능하게, 불가능하게 제어할 수 있다. 

그것이 바로 접근제한자다.

 

 

 

접근제한자 

 

종류

  1. public > 어떤 클래스든 접근가능
  2. protected > 자기 자신, 같은 패키지, 다른 패키지여도 상속받은 자식 클래스에서 가능
  3. protected > 자기 자신만
  4. 접근제한자X > default 지정자

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*본 게시글은 프로그래머스<자바 입문>강의를 토대로 작성한 글입니다. 

'JAVA > 상속' 카테고리의 다른 글

상속(inheritance)  (0) 2022.09.26