본문 바로가기
Java/Java 예습

[Java] 자바의 객체 Part.2 예습_2

by 박채니 2022. 1. 20.

안녕하세요, 코린이의 코딩 학습기 채니입니다.

Java 객체를 예습했던 내용을 정리한 포스팅입니다.

 

super()와 super.

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

: 후손 객체 생성 시에는 부모부터 생성이 되기 때문에 후손 클래스 생성자 안에는 부모 생성자를 호출하는 super()가 첫 줄에 존재

(부모 생성자가 가장 먼저 실행 되어야 하기 때문에 명시적으로 작성 시에도 반드시 첫 줄에만 작성)

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

 

super.

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

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

 

package com.kh.p1.inherit.child.model.vo;

import com.kh.p1.inherit.parent.model.vo.Person;

public class Student extends Person {
	private int grade;	//학년
	private String major;	//전공
	
	public Student() {
		super();
	}

	
	public Student(int grade, String major) {
		super();
		this.grade = grade;
		this.major = major;
	}

	public Student(String name, int age, char gender, String addr, int grade, String major) {
		super(name, age, gender, addr);
		this.grade = grade;
		this.major = major;
	}
	
	public int getGrade() {
		return grade;
	}
	
	public void setGrade(int grade) {
		this.grade = grade;
	}
	
	public String getMajor() {
		return major;
	}
	
	public void setGrade(String major) {
		this.major = major;
	}
	
	public String information() {
	//	return "이름 : " + super.name + ", 나이 : " + age + ", 성별 : " + gender + ", 주소 : " + addr + ", 학년 : " + grade + ", 전공 : " + major;
		return super.information() + ", 학년 : " + grade + ", 전공 : " + major;
	}
}

package com.kh.p1.inherit.parent.model.vo;

public class Person {
	protected String name;	//이름
	protected int age; 	//나이
	protected char gender;	//성별
	protected String addr;	//주소
	
	public Person() {}
	
	public Person(String name, int age, char gender, String addr) {
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.addr = addr;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	public char getGender() {
		return gender;
	}
	
	public void setGender(char gender) {
		this.gender = gender;
	}
	
	public String getAddr() {
		return addr;
	}
	
	public void setAddr(String addr) {
		this.addr = addr;
	}
	
	public String information() {
		return "이름 : " + name + ", 나이 : " + age + ", 성별 : " + gender + ", 주소 : " + addr;
	}
}
@run
package com.kh.p1.inherit.run;

import com.kh.p1.inherit.child.model.vo.Employee;
import com.kh.p1.inherit.child.model.vo.Student;

public class Run {

	public static void main(String[] args) {
		Employee emp = new Employee();
		emp.setName("김씨");
		emp.setAge(17);
		emp.setSalary(2000);
		
		//System.out.println(emp.getName() + " (부모 클래스)");
		//System.out.println(emp.getAge() + " (부모 클래스)");
		//System.out.println(emp.getSalary());
		
		//Student stu = new Student(3, "컴퓨터공학과");
		//System.out.println(stu.information());
		
		//Employee emp1 = new Employee(2000, "영업부");
		//System.out.println(emp1.informaiton());
		
		Student stu1 = new Student("홍길동", 21, '남', "서울시 송파구", 3, "컴퓨터공학과");
		System.out.println(stu1.information());
		
	}
	
}

@출력값
이름 : 홍길동, 나이 : 21, 성별 : 남, 주소 : 서울시 송파구, 학년 : 3, 전공 : 컴퓨터공학과

상속 구조를 통해 자식 클래스 하나만 생성하면서 부모 객체에 있는 멤버변수의 값까지 컨트롤 할 수 있음!

 

Is a 와 Has a

Is a (상속관계/일반화 관계)

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

 

Circle is a Shape.

Circle(자식) 클래스 하나의 Shape(부모) 클래스이다. (Is a 상속관계)

 

Has a (포함관계/연관관계)

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

 

Circle has a PointCircle 클래스 Point 클래스를 가지고 있다. (has a 포함 관계)

 

package com.kh.p1.inherit.child.model.vo;

public class Computer {
	//멤버변수
	private String cpu;		// cpu사양 
	private String brand; 	// 제조사
	private int price;		// 가격
	
	//기본생성자
	public Computer() {}
	
	//매개변수 있는 생성자
	public Computer(String cpu, String brand, int price) {
		this.cpu = cpu;
		this.brand = brand;
		this.price = price;
	}
	
	//getter setter
	public String getCpu() {
		return cpu;
	}
	
	public void setCpu(String cpu) {
		this.cpu = cpu;
	}
	
	public String getBrand() {
		return brand;
	}
	
	public void setBrand(String brand) {
		this.brand = brand;
	}
	
	public int getPrice() {
		return price;
	}
	
	public void setPrice(int price) {
		this.price = price;
	}
	
	//멤버변수의 값들을 string으로 반환해줄 수 있게 하는 information이라는 메소드
	public String information() { 
		return ", cpu : " + cpu + ", 제조사 : " + brand + ", 가격 : " + price;
	}	
}
package com.kh.p1.inherit.child.model.vo;

import com.kh.p1.inherit.parent.model.vo.Person;

public class Student extends Person {
	private int grade;	//학년
	private String major;	//전공
	
	private Computer com;	//Computer 클래스를 하나의 멤버변수로 포함 (포함관계)
	
	public Student() {
		super();
	}

	
	public Student(int grade, String major) {
		super();
		this.grade = grade;
		this.major = major;
	}

	public Student(String name, int age, char gender, String addr, int grade, String major, Computer com) {
		super(name, age, gender, addr);
		this.grade = grade;
		this.major = major;
		this.com = com;
	}
	
	public int getGrade() {
		return grade;
	}
	
	public void setGrade(int grade) {
		this.grade = grade;
	}
	
	public String getMajor() {
		return major;
	}
	
	public void setGrade(String major) {
		this.major = major;
	}
	
	public String information() {
	//	return "이름 : " + super.name + ", 나이 : " + age + ", 성별 : " + gender + ", 주소 : " + addr + ", 학년 : " + grade + ", 전공 : " + major;
		return super.information() + ", 학년 : " + grade + ", 전공 : " + major + com.information();
	}
}
package com.kh.p1.inherit.run;

import com.kh.p1.inherit.child.model.vo.Computer;
import com.kh.p1.inherit.child.model.vo.Employee;
import com.kh.p1.inherit.child.model.vo.Student;

public class Run {

	public static void main(String[] args) {
		Computer com = new Computer("i7-1234", "채코", 1800);
		Student stu2 = new Student("홍길동", 21, '남', "서울시 송파구", 3, "컴퓨터공학과", com);
		System.out.println(stu2.information());
	}
}

@출력값
이름 : 홍길동, 나이 : 21, 성별 : 남, 주소 : 서울시 송파구, 학년 : 3, 전공 : 컴퓨터공학과, cpu : i7-1234, 제조사 : 채코, 가격 : 1800