상속의 특징
상속의특징
메서드 오버라이드
- 부모 클래스의 기능을 자식 클래스에서 재정의 해서 사용
- 자식클래스에서 부모클래스의 메서드와 동일한 이름의 메서드를 만들어서 사용할 수 있음
- 기존 부모 클래스의 메서드의 기능을 덮어쓰게 됨
// 부모클래스
package inheritanceTest;
public class ParentClass {
public ParentClass() {
System.out.println("ParentClass constructor");
}
public void OverrideTest() {
System.out.println("Parent method");
}
}
// 자식클래스
package inheritanceTest;
public class ChildClass extends ParentClass{
public ChildClass() {
System.out.println("ChildClass constructor");
}
// 부모클래스의 메서드와 동일한 이름으로 메서드 오버라이드
// Override 어노테이션을 붙여줘서 좀더 명확히 알아볼 수 있게 만들어줌
@Override
public void OverrideTest() {
System.out.println("overide child method");
}
}
package inheritanceTest;
public class MainClass {
public static void main(String[] args) {
ChildClass child = new ChildClass();
child.OverrideTest();
}
}
// 결과
/*
ParentClass constructor
ChildClass constructor
overide child method
*/
// 자식 클래스에서 오버라이드한 결과가 나오는 것을 확인 할 수 있음
자료형(타입)
- 클래스도 자료형임!
- 정의한 클래스의 이름은 데이터 타입으로 이용된다
// 부모클래스
package inheritanceTest;
public class ParentClass {
public ParentClass() {
System.out.println("ParentClass constructor");
}
public void OverrideTest() {
System.out.println("Parent method");
}
}
// 자식클래스 1 (동일한 부모 공유)
package inheritanceTest;
public class FirstChildClass extends ParentClass{
public FirstChildClass() {
System.out.println("FirstChildClass constructor");
}
@Override
public void OverrideTest() {
System.out.println("overide FirstChildClass method");
}
}
// 자식클래스 2 (동일한 부모 공유)
package inheritanceTest;
public class SecondChildClass extends ParentClass{
public SecondChildClass() {
System.out.println("SecondChildClass constructor");
}
@Override
public void OverrideTest() {
System.out.println("overide SecondChildClass method");
}
}
// main
package inheritanceTest;
public class MainClass {
public static void main(String[] args) {
// 자식 클래스의 객체의 데이터 타입은 부모 클래스 여도 상관 없다
// 왜냐하면 상속받은것이기 때문에
// 물론 자식 클래스를 데이터 타입으로 사용해도 상관 없다
ParentClass firstchild = new FirstChildClass();
ParentClass secondchild = new SecondChildClass();
ParentClass[] pArr = new ParentClass[2];
// 배열에 할당한 두 객체는 서로 다른 클래스로 부터 생긴 객체이다
// 하지만 같은 부모 클래스를 상속하기 때문에 데이터 타입으로 통일시킬수 있음
// 따라서 같은 배열안에 담길 수 있는 것임
// 만약 위에서 객체의 타입을 각각의 자식 클래스로 선언했어도 가능하다
// 여전히 동일한 부모로부터 상속받기 때문이다
pArr[0] = firstchild;
pArr[1] = secondchild;
for (int i = 0; i < pArr.length; i++) {
pArr[i].OverrideTest();
}
}
}
Object 클래스
-
모든 클래스의 최상위 클래스는 Object 클래스임
-
상속을 받지 않는 클래스이더라도
- 예제의 경우
ParentClass
-
Object 클래스를 상속받고 있다.
- 이클립스에서 클래스를 드래그 하고 ctrl+t를 누르면 상속관계를 확인할 수 있음
-
따라서 객체의 데이터 타입을 Object로 맞춰주면 데이터 타입을 통일 시킬 수 있음
super 클래스
-
상위 클래스를 호출할 때 super 키워드를 이용
-
this
는 현재 내가 갖고있는 객체를 가리킬때 사용
-
super
는 상위 클래스로 올라가라는 얘기 즉, 상위 클래스의 객체를 가리킬때 사용
// 부모클래스
package inheritanceTest;
public class ParentClass {
int num = 10;
public ParentClass() {
}
}
// 자식클래스package inheritanceTest;public class FirstChildClass extends ParentClass{ int num = 20; public FirstChildClass() { } public void getSuper() { System.out.println("this int = " + this.num); System.out.println("super int = " + super.num); } }
// mainpackage inheritanceTest;public class MainClass { public static void main(String[] args) { FirstChildClass c = new FirstChildClass(); c.getSuper(); }}/*this int = 20super int = 10*/
Author And Source
이 문제에 관하여(상속의 특징), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@jajubal/상속의-특징
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 기존 부모 클래스의 메서드의 기능을 덮어쓰게 됨
// 부모클래스
package inheritanceTest;
public class ParentClass {
public ParentClass() {
System.out.println("ParentClass constructor");
}
public void OverrideTest() {
System.out.println("Parent method");
}
}
// 자식클래스
package inheritanceTest;
public class ChildClass extends ParentClass{
public ChildClass() {
System.out.println("ChildClass constructor");
}
// 부모클래스의 메서드와 동일한 이름으로 메서드 오버라이드
// Override 어노테이션을 붙여줘서 좀더 명확히 알아볼 수 있게 만들어줌
@Override
public void OverrideTest() {
System.out.println("overide child method");
}
}
package inheritanceTest;
public class MainClass {
public static void main(String[] args) {
ChildClass child = new ChildClass();
child.OverrideTest();
}
}
// 결과
/*
ParentClass constructor
ChildClass constructor
overide child method
*/
// 자식 클래스에서 오버라이드한 결과가 나오는 것을 확인 할 수 있음
// 부모클래스
package inheritanceTest;
public class ParentClass {
public ParentClass() {
System.out.println("ParentClass constructor");
}
public void OverrideTest() {
System.out.println("Parent method");
}
}
// 자식클래스 1 (동일한 부모 공유)
package inheritanceTest;
public class FirstChildClass extends ParentClass{
public FirstChildClass() {
System.out.println("FirstChildClass constructor");
}
@Override
public void OverrideTest() {
System.out.println("overide FirstChildClass method");
}
}
// 자식클래스 2 (동일한 부모 공유)
package inheritanceTest;
public class SecondChildClass extends ParentClass{
public SecondChildClass() {
System.out.println("SecondChildClass constructor");
}
@Override
public void OverrideTest() {
System.out.println("overide SecondChildClass method");
}
}
// main
package inheritanceTest;
public class MainClass {
public static void main(String[] args) {
// 자식 클래스의 객체의 데이터 타입은 부모 클래스 여도 상관 없다
// 왜냐하면 상속받은것이기 때문에
// 물론 자식 클래스를 데이터 타입으로 사용해도 상관 없다
ParentClass firstchild = new FirstChildClass();
ParentClass secondchild = new SecondChildClass();
ParentClass[] pArr = new ParentClass[2];
// 배열에 할당한 두 객체는 서로 다른 클래스로 부터 생긴 객체이다
// 하지만 같은 부모 클래스를 상속하기 때문에 데이터 타입으로 통일시킬수 있음
// 따라서 같은 배열안에 담길 수 있는 것임
// 만약 위에서 객체의 타입을 각각의 자식 클래스로 선언했어도 가능하다
// 여전히 동일한 부모로부터 상속받기 때문이다
pArr[0] = firstchild;
pArr[1] = secondchild;
for (int i = 0; i < pArr.length; i++) {
pArr[i].OverrideTest();
}
}
}
모든 클래스의 최상위 클래스는 Object 클래스임
상속을 받지 않는 클래스이더라도
- 예제의 경우
ParentClass
Object 클래스를 상속받고 있다.
- 이클립스에서 클래스를 드래그 하고 ctrl+t를 누르면 상속관계를 확인할 수 있음
따라서 객체의 데이터 타입을 Object로 맞춰주면 데이터 타입을 통일 시킬 수 있음
상위 클래스를 호출할 때 super 키워드를 이용
this
는 현재 내가 갖고있는 객체를 가리킬때 사용
super
는 상위 클래스로 올라가라는 얘기 즉, 상위 클래스의 객체를 가리킬때 사용
// 부모클래스
package inheritanceTest;
public class ParentClass {
int num = 10;
public ParentClass() {
}
}
// 자식클래스package inheritanceTest;public class FirstChildClass extends ParentClass{ int num = 20; public FirstChildClass() { } public void getSuper() { System.out.println("this int = " + this.num); System.out.println("super int = " + super.num); } }
// mainpackage inheritanceTest;public class MainClass { public static void main(String[] args) { FirstChildClass c = new FirstChildClass(); c.getSuper(); }}/*this int = 20super int = 10*/
Author And Source
이 문제에 관하여(상속의 특징), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jajubal/상속의-특징저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)