객체지향 특징 오버로딩 (Overloading)
정의 ▶ 다형성 (polymorphism)
-
동일한 이름으로 약간 다른 방법으로 동작하는 함수를 호출하는 것

한 클래스 내에 동일한 이름의 생성자, 메소드를 여러 개 작성 하는것
(but 매개변수 타입,갯수,순서가 달라야함)
사용조건 -  생성자, 메소드 이름은 동일해야 한다
-  매개변수의 개수 또는 다른 매개변수 타입이 달라야한다
사용예시  public void method( )   // 1
public void method(int int1)   // 매개변수 타입 다름
public void method(String strS)   // 매개변수 타입 다름
! public void method(int int2)   //  매개변수 타입이 같으므로 X
public void method(int int1, String strS)   // 매개변수의 갯수가 다름
public void method(String strS, int int1)   // 주의! 매개변수의 순서가 달라도 다른 메소드라 인식
객체지향 특징 오버라이딩(Overriding)
정의 ▶ 상속성(inheritance)
- 하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는 것 (객체지향 방법의 중요한 기능)

자식 클래스가 상속 받은 부모 메소드를 재작성 하는것(메서드의 내용만 변경 하는 것), 자식 객체를 통한 실행 시후손(부모) 것이 우선권을 가짐

▶ 오버라이딩(Overriding)
부모 클래스로부터 상속받은 메소드의 내용을 변경하는 것오버라이딩(Overriding)이라고 한다.
상속받은 메소드를 그대로 사용하지않고 자식 클래스 자신에 맞게 변경해야 하는 경우 부모의 메소드를 오버라이딩이라고 한다.

상속 특징 1. 자식 클래스는 부모 클래스의 필와(int i;) 메서드()물려받게 된다.

2. 모든 클래스는 object클래스의 후손
object클래스가 제공하는 메소드를 오버라이딩하여 메소드 재구현 가능

3. 부모클래스의 생성자, 초기화 블록은 상속 안됨
자식 클래스 생성 시, 부모 클래스 생성자가 먼저 실행
자식 클래스 생성자 안에서 부모 클래스 생성자 호출을 명시하고 싶으면 super() 활용

4. 부모의 private멤버는 상속은 되지만 직접 접근 불가
(오버라이딩 불가)
자식 객체 생성 시에 부모의 필드 값도 전달 받은 경우,
자식 생성자 안에서 부모의 private필드에 직접 접근하여 대입 불가
super() 이용하여 전달받은 부모 필드 값을 부모 생성자 쪽으로 넘겨서 생성하거나 setter, getter 메소드를 이용하여 접근ex) super.setter( )
오버라이딩
특징
-  메소드 헤드라인 위에 반드시 Annotaion, @Override 표시
 접근 제어자를 부모 것보다 같거나 넓은 범위로 변경 가능   
ex) public > public   
protected > protected, public
 부모 메소드의 예외처리 클래스 처리범위보다 좁은 범위로 예외처리 클래스 수정 가능
사용조건 부모 클래스의 메소드와 자식클래스의 메소드 비교
-  메소드 이름 동일
 매개변수의 개수, 타입, 순서 동일
 리턴 타입 동일 (java 1.5부터는 리턴 타입의 하위 클래스로 변환 가능)
사용목적 클래스의 재사용, 연관된 일련의 클래스들에 대한 공통적인 규약 정의
상속의 장점 1. 중복된 코드를 줄일 수 있고 보다 적은 양의 코드로 새로운 클래스 작성 가능
2. 코드를 공통적으로 관리하기 때문에 코드의 추가,변경,유지보수 용이
3. 통일성이 있고 다형성을 구현가능
상속의 장점 1. 중복된 코드를 줄일 수 있고 보다 적은 양의 코드로 새로운 클래스 작성 가능
2. 코드를 공통적으로 관리하기 때문에 코드의 추가,변경,유지보수 용이
3. 통일성이 있고 다형성을 구현가능
예시  

 

 

🔯  super()와 super

✔ super()

부모 객체의 생성자를 호출하는 메소드로 기본적으로 후손 생성자에 부모 생성자 포함

후손 객체 생성 시에는 부모로부터 생성이 되기 떄문에 후손 클래스 생성자 안에는

부모 생성자를 호출하는 super()가 첫 줄에 존재 (부모 생성자가 가장 먼저 실행되어야 하기 떄문에 명시적으로 작성 시에도 반드시 첫 줄에만 작성)

매개변수 있는 부모 생성자 호출은 super(매개변수,매개변수)를 넣으면 됨

 

✔ super.

상속을 통한 자식 클래스 정의 시 해당 자식 클래스의 부모 객체를 가리키는 참조변수

자식 클래스 내에서 부모 클래스 객체에 접근하여 필드나 메소드 호출 시 사용

 

🔯  IS vs Has a

✔ Is a (상속관계)

일반화 관계 >> 상속관계

"자식클래스는 (하나의) 부모 클래스이다." 관계로, 부모 클래스를 자식 클래스가 상속한다.

 

✔ Has a (포함관계)

연관 관계 >> 포함관계

한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언함

 

✔ 다음 클래스의 관계를 정의해보자

 

 

✔ 예시

더보기

✔ 부모클래스 extends

package com.hy3.model;

public class Hobby {
	//멤버변수
	private int spendTime;	//투자 시간(년)
	private int spendMoney;	//투자 금액(만원)
	
	public Hobby() {
	}
	
	public Hobby(int spendTime,int spendMoney) {
		this.spendTime=spendTime;
		this.spendMoney=spendMoney;
	}
	
	@Override
	public String toString() {
		return "이 취미를 위해 투자한 시간은"+spendTime+"년,투자한 금액은"+spendMoney+"만원이다";
	}
	
	public void print() {
		System.out.println("이 취미를 위해 투자한 시간은"+spendTime+"년,투자한 금액은"+spendMoney+"만원이다");
	}
}

✔ 자식클래스 extends

package com.hy3.model;

public class Collecting extends Hobby{		// Hobby:부모클래스 Collecting:자식클래스
private String stuff;

public Collecting() {
}

public Collecting(String stuff) {
this.stuff=stuff;
}

public Collecting(int spendTime,int spendMoney,String stuff) {
super(spendTime,spendMoney);
this.stuff=stuff;
}

public void colMethod() {
System.out.println(super.toString()+"내가 취미로 모으는 물품은"+stuff+"이다");
}

@Override
public void print() {
System.out.println(super.toString()+"내가 취미로 모으는 물품은"+stuff+"이다");
}
}

 

 

🔯  toString 메서드

✔ toString()메소드는 Java의 모든 클래스의 수퍼 클래스 인Object클래스의 일부입니다. 이는 모든 클래스에 자체toString()메소드가 있음을 의미합니다. 하지만 매번 기본toString()메소드에서 원하는 출력을 얻지는 못합니다.

메서드를 재정의하고 필요에 따라 사용자 지정해야 할 때입니다.

 

 toString()메서드를 재정의하지 않은 예제

ExampleClass클래스의 객체를 생성 한 다음 객체를 인쇄하면 의미가없고 사람이 읽을 수없는 객체를 얻습니다.

public class OverrideToString {
    public static void main(String[] args) {

        ExampleClass exampleClass = new ExampleClass("Alex", "Novel", 24);

        System.out.println(exampleClass);
    }
}

class ExampleClass {
    String firstName;
    String lastName;
    int age;

    ExampleClass(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

}

출력:

ExampleClass@37bba400

 

 toString()메서드를 재정의한 예제

@Override주석을 사용하여toString()메서드를 재정의하고 메서드 이름을String반환 유형으로 작성합니다.

메서드가 문자열을 반환하므로이를 구성해야합니다. 변수를 String과 연결하여 단일 String을 만듭니다. 마지막으로exampleClass의 객체를 생성하고 인쇄 할 때 전달 된 변수 값이있는 문자열로 출력을 얻습니다.

public class OverrideToString {
    public static void main(String[] args) {

        ExampleClass exampleClass = new ExampleClass("Alex", "Novel", 24);

        System.out.println(exampleClass);
    }
}

class ExampleClass {
    String firstName;
    String lastName;
    int age;

    ExampleClass(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    @Override
    public String toString() {				//ExampleClass로 리턴
        return "firstName=" + firstName + 
               ", lastName=" + lastName + 
               ", age=" + age;
    }
}

출력:

firstName='Alex', lastName='Novel', age=24

'Language > Java' 카테고리의 다른 글

Scanner 클래스 / print메소드  (0) 2022.01.24
this  (0) 2022.01.18
객체 배열  (0) 2022.01.04
Class - 메소드 (Method)  (0) 2022.01.04
Class - 생성자 (Constructor)  (0) 2022.01.03