JAVA :: Test112_상속(super, 오버라이딩)

2023. 9. 13. 23:50· 📚 Study/Java
/*
class Aclass
{
Aclass(int n)
{
}
}
class Bclass extends Aclass
{
Bclass()
{
super(); //-->> 에러 발생
// 상위 클래스에 인자가 없는 생성자가 없기 때문에 불러올 수 없음
}
}
*/
// 하위 클래스인 Bclass의 생성자에서
// 명시적으로 Aclass의 생성자를 호출하지 않으면
// 자동으로 인자 없는 생성자를 호출한다.
// 하지만, Aclass 에는 인자가 있는 생성자만 존재하고
// 인자가 없는 생성자는 존재하지 않기 때문에 에러 발생한다.
// 따라서, Bclass 생성자의 선두에
// 다음처럼 명시적으로 상위 클래스의 생성자 호출 구문을 작성해야 한다.
/*
class Aclass
{
Aclass(int n)
{
}
}
class Bclass extends Aclass
{
Bclass()
{
super(10);
}
}
//Rect112 클래스와 Circle112 클래스의 부모 클래스
class SuperTest112
{
protected double area;
private String title;
public SuperTest112()
{
System.out.println("SuperTest112... 인자 없는 생성자");
}
public SuperTest112(String title)
{
this.title = title;
System.out.println("SuperTest112... 문자열을 넘겨받는 생성자");
}
public void write()
{
System.out.println(title + " - " + area);
}
}
//SuperTest112 클래스를 상속받는 자식 클래스(단일 상속)
class Rect112 extends SuperTest112
{
/*
protected double area;
private String title; //-- private 멤버는 접근 불가능 상속x
// ※ 생성자는 상속 대상에서 제외~!!!
public SuperTest112()
{
System.out.println("SuperTest112... 인자 없는 생성자");
}
// ※ 생성자는 상속 대상에서 제외~!!!
public SuperTest112(String title)
{
this.title = title;
System.out.println("SuperTest112... 문자열을 넘겨받는 생성자");
}
public void write()
{
System.out.println(title + " - " + area);
}
*/
private int w,h;
public Rect112()
{
// super(); ==> 자동 생성
}
public void calc(int w, int h)
{
this.w = w;
this.h = h;
area = (double)this.w * this.h;
write();
}
@Override //-- 오버라이딩
public void write()
{
System.out.println("w : " + w + ", h : " + h);
System.out.println("사각형 - " + area);
}
}
// SuperTest112 클래스를 상속받는 자식 클래스(단일 상속)
class Circle112 extends SuperTest112
{
/*
protected double area;
private String title; //-- private 멤버는 접근 불가능 상속x
// ※ 생성자는 상속 대상에서 제외~!!!
public SuperTest112()
{
System.out.println("SuperTest112... 인자 없는 생성자");
}
// ※ 생성자는 상속 대상에서 제외~!!!
public SuperTest112(String title)
{
this.title = title;
System.out.println("SuperTest112... 문자열을 넘겨받는 생성자");
}
public void write()
{
System.out.println(title + " - " + area);
}
*/
public Circle112(String title)
}
super(title);
}
public void calc(int r)
{
area = r * r * 3.141592;
write();
}
}
//-------------------------------------------------------------
// main() 메소드를 포함하는 외부의 다른 클래스
public class Test112
{
public static void main(String[] args)
{
//Rect112 클래스(자식 클래스) 기반 인스턴스 생성
Rect112 ob1 = new Rect112();
//--==>> SuperTest112... 인자 없는 생성자
//Circle112 클래스(자식 클래스) 기반 인스턴스 생성
//Circle112 ob2 = new Circle112();
//--==>> 에러 발생 (컴파일 에러)
//-- 현재 Circle112 클래스에는
// 매개변수를 필요로 하는 사용자정의 생성자가 만들어져 있으며
// 이로 인해 default 생성자가 자동으로 삽입되지 않는 상황이다.
//Circle112 클래스(자식 클래스) 기반 인스턴스 생성
Circle112 ob3 = new Circle112("원");
//--==>> SuperTest112... 인자 없는 생성자
// ↓
//--==>> SuperTest112... 문자열을 넘겨받는 생성자
ob1.calc(10, 5);
//--==>> w : 10, h : 5
// 사각형 - 50.0
ob3.calc(10);
//--==>> 원 - 314.1592
}
}
저작자표시 (새창열림)
'📚 Study/Java' 카테고리의 다른 글
  • JAVA :: Test114_상속(메소드 오버라이딩)
  • JAVA :: Test113_상속(상속의 개념을 적용하여 연산 프로그램 구현)
  • JAVA :: Test111_상속(Inheritance)
  • JAVA :: Note#6 상속(Inheritance)
bono-hye
bono-hye
bono-hye
공부를 합시다👩🏻‍💻
bono-hye
전체
오늘
어제
  • 분류 전체보기 (506)
    • 📚 Study (225)
      • Java (148)
      • Oracle (28)
      • JDBC (4)
      • Javascript (9)
      • JSP & Servlet (19)
      • JQuery (6)
      • Spring (9)
      • Springboot (0)
      • 개인 공부 (2)
    • ✏️ 문제풀이 (280)
      • 백준 (181)
      • 프로그래머스 (99)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리
hELLO · Designed By 정상우.v4.2.1
bono-hye
JAVA :: Test112_상속(super, 오버라이딩)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.