[Java]::Remind - Inheritance

Gentlee's Self-Study Log·2023년 4월 26일
0

Java Reminder

목록 보기
4/19
post-thumbnail

Inheritance = 상속

클래스가 가지고 있는 내용(메서드, 변수 등)들을 중복되어 갖고 있는 클래스들 간의 유지/보수성을 위해 하나의 클래스(부모 클래스)에 정의한 후, 상속받아 사용한다.

자식클래스가 부모클래스를 상속받을 때, 클래스 선언문 뒤에
extend <부모클래스>를 붙인다.

상속의 조건

  • 공통 멤버를 가지고 있는 클래스들간의 공통점이 있는가?
  • is a 관계가 성립되는가?

Example code

	public class Student{
		private String name;
		private int age;
		private int studentNum;
	}
	
	public class Employee{
		private String name;
		private int age;
		private int employeeNum;
	}
	
	public class Professor{
		private String name;
		private int age;
		private int professorNum;
	}

중복되는 내용이 있는 클래스를 부모클래스를 만들어 상속시킨다.

	public class Person{
		private String name;
		private int age;
		
	}
	
	public class Studen extends Person{
		private int studentNum;
	}
	
	public class Employee extends Person{
		private int employeeNum;
	}
	
	public class Professor extends Person{
		private int professorNum;
	}

Method Overriding

메서드 오버라이딩

상속받은 메서드를 재정의하는것이 메서드 오버라이딩이다.
부모클래스로부터 자식클래스로 상속할 때, 메서드 오버라이딩이 일어난다.
이 때,

  • 상속받은 메서드 바디만 변경할 수 있고,
  • 상속받은 메서드 선언부는 변경이 불가능하고,
  • 상속받은 메서드의 접근제어자는 동일범위 혹은 더 큰 범위만 가능하다.

Example code

public class Person{
	private String name;
	private int age;
    
	public String toString() {
		return "name"+name+": age"+"age";
	}
}
	
public class Studen extends Person{
	private int studentNum;
		
	public String toString() {
		return "name"+name+" : age"+age+" : Student Number"+studentNum;
	}
}

super

super는 상속하는 부모 객체를 나타낸다.

	public class Person{
		private String name;
		private int age;
		
		public String toString() {
			return "name"+name+": age"+"age";
			
		}
	}
	
	public class Studen extends Person{
		private int studentNum;
		
		public String toString() {
			return super.toString()+" : Student Number"+studentNum;
			
		}
	}

생성자 오버로딩

부모객체를 활용한 생성자 오버로딩

public Student(String name, int age, int studentNum) {
			super.setName(name);
			super.setAge(age);
			this.studentNum=studentNum;
		}
public Person(String name, int age){
	this.name=name;
    this.age=age;
}

public Student(String name, int age, int studentNum) {
		super.(name, age);
		this.studentNum=studentNum;
	}

생성자 오류

생성자 오버로딩이 일어날 때 부모객체에서 생성자에 대한 언급이 없으면, 자바는 컴파일 과정에서 super()를 자동으로 생성하기 때문에 오류가 난다.

public class Person{
	private String name;
	private int age;
	
// public Person() {
//    
// }
		
	public String toString() {
		return "name"+name+": age"+"age";
			
	}
}
public Student(String name, int age, int studentNum) {
			super();  // 자동으로 생성되기 때문에 오류발생
			this.studentNum=studentNum;
			
		}
profile
https://github.com/SamGentlee

0개의 댓글