/*
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
}
}
/* 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 } }