왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • pip install labelme
  • 영상처리
  • pytorch
  • ComputerVision
  • 영상기술
  • 비지도학습
  • 컴퓨터비전
  • 영상처리역사
  • matplotlib
  • encoding='utf-8'
  • unsupervised
  • imageprocessing
  • alibidetect
  • labelme
  • TensorFlow
  • labelme UnocodeDecodeError
  • alibi-detection
  • UnboundLocalError
  • yolov8
  • tune()
  • get_long_description
  • 딥러닝
  • 기상탐사
  • OpenCV
  • maskimage
  • PIL
  • numpy
  • PYTHON
  • 의료이미징
  • ckpt_file

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

Java - 상속 (Inheritance) / 메소드 오버라이딩 (Method Overriding) / super
Java

Java - 상속 (Inheritance) / 메소드 오버라이딩 (Method Overriding) / super

2023. 1. 19. 17:15
728x90

상속이란?

자바에는 상속(Inheritance)이라는 개념이 존재합니다.

쉽게 말해 부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)가 있으며, 자식 클래스는 부모 클래스를 선택해서, 그 부모의 멤버를 상속받아 그대로 쓸 수 있게 됩니다.

상속을 하는 이유는 간단합니다. 이미 마련되어 있던 클래스를 재사용해서 만들 수 있기 때문에 효율적이고, 개발 시간을 줄여주게 됩니다.

 

 

부모 클래스 코드

public class Parent {
	String name;
	int age;
	private int money;
	
	Parent(){
		System.out.println("Parent 클래스 생성자!");
	}
	
	public int getMoney() {
		return money;
	}
	public void setMoney(int money) {
		this.money = money;
	}
	
	void print() {
		System.out.println("name :"+name);
		System.out.println("age :"+age);
	}
	void printMoney() {
		System.out.println("name :"+name);
		System.out.println("age :"+age);
		System.out.println("money :"+money);
	}

}

자식 클래스 코드

public class Child extends Parent{
	
	// 상속받을 때 사용하는 키워드가 extends다.
	// extends 오른 쪽에 상속받을 클래스명을 쓴다.
	// 즉 Parent 클래스의 멤버 변수와 메소드를 상속받는다는 뜻이다.
	// 우리 눈에는 안 보이지만 상속받은 코드가 숨어있는 것!!!!!
	String hobby;
	
	Child(){
		System.out.println("Child 클래스 생성자!!!!!!");
	}
}

메인함수 코드

public class PersonMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 메모리 확보
		Parent p = new Parent();
		// 데이터 저장
		p.name = "홍길동";
		p.age = 50;
		p.setMoney(1000000000);
		// 저장된 데이터 출력
//		p.print();
//		p.printMoney();
		
		// Child 클래스를 객체 생성한다.
		Child c = new Child();
		// 데이터 저장
		c.name = "홍나나";
		c.age = 23;
		c.setMoney(500000);
		c.hobby = "게임";
		
		// 저장된 데이터 확인 ! 출력 !
		c.print();
		c.printMoney();

	}

}

위 코드 실행 결과를 보면 

메모리 동작방식을 확인하기 위해  생성자 함수에 print 문을 넣어놨다. 실행 결과

메모리를 확보하는 코드 ( Parent p = new Parent(); )를 한 번만 했지만 상속받은 Child 클래스의 객체를 생성할 때도

부모클래스의 코드가 실행되는 것을 확인할 수 있다.

 

메소드 오버라이딩 ( Method Overriding)

Child에 있는 hobby 정보까지 같이 출력할 수 있는 함수를 만드려고한다.

이럴 때 새로운 함수를 만들지 않고 상속받은 함수를 재활용하여 코드를 작성할 수 있는 방법을

Method Overriding 메소드 오버라이딩이라고 한다.

 

사용하는 방법.

코드 작성하는 곳에 마우스 우클릭 -> source -> Override / Implement Methods

@Override
	void print() {
		// TODO Auto-generated method stub
		super.print();

위 코드에서 super란 extends 옆에 있는 상속받은 클래스를 말한다.

 

내가 원하는 대로 개발을 하고 싶으면 위 코드에서 super.print();를 지우고 아래 코드와 같이 작성을 해도 된다.

@Override
	public void print() {
		// TODO Auto-generated method stub
		System.out.println(name+" "+age+" "+job+" "+hobby);
	}

같은 print(); 함수를 썼지만 각각 결과가 다른 모습

 

 

 

수퍼클래스(부모클래스)의 생성자를 호출하는 코드

 

 

// 수퍼클래스의 생성자 호출하는 코드.
		super(num,name,dept,address);

 

'Java' 카테고리의 다른 글

Java - 정수 및 실수를 클래스로 생성하는 방법 / 문자열 형변환 / 문자열 함수  (0) 2023.01.25
Java - 추상클래스 (abstract)와 인터페이스(interface)  (0) 2023.01.20
Java - 접근제어자 / this / getter setter  (0) 2023.01.19
Java - 생성자(Constructor) , 생성자 오버로딩  (0) 2023.01.19
Java - 메소드 오버로딩 (Method Overloading)  (0) 2023.01.18
    'Java' 카테고리의 다른 글
    • Java - 정수 및 실수를 클래스로 생성하는 방법 / 문자열 형변환 / 문자열 함수
    • Java - 추상클래스 (abstract)와 인터페이스(interface)
    • Java - 접근제어자 / this / getter setter
    • Java - 생성자(Constructor) , 생성자 오버로딩
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바