250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- @configuration
- objecterror
- 스프링컨테이너
- 테스트코드
- 코드트리
- 의존관계
- java
- 추상클래스
- 프록시
- JSON
- 서블릿
- 백준
- equals()
- 다형성
- HttpServletResponse
- 참조변수
- 티스토리챌린지
- 김영한
- http 메시지 컨버터
- 오블완
- 싱글톤
- 코딩테스트
- ocp
- 코드트리조별과제
- 인터페이스
- 스프링
- DI
- 오버라이딩
- html form
- fielderror
Archives
- Today
- Total
minOS
자바의 정석 ch7-10,11 참조변수 super, 생성자 super() 본문
728x90
ch7-10 참조변수 super
- 객체 자신을 가리키는 참조변수, 인스턴스 메서드(생성자) 내에서만 존재 (static 메서드 내에 사용불가능)
- 조상의 멤버를 자신의 멤버와 구별할 때 사용
class Parent { int x = 10; //super.x } class Child extends Parent{ int x =20; //this.x void method(){ System.out.println("x:"+x); System.out.println("this.x:"+this.x); System.out.println("super.x:"+super.x); } } public class Main { public static void main(String[] args) { Child child = new Child(); child.method(); } }
출력
class Parent { int x = 10; //super.x } class Child extends Parent{ void method(){ System.out.println("x:"+x); System.out.println("this.x:"+this.x); System.out.println("super.x:"+super.x); } } public class Main { public static void main(String[] args) { Child child = new Child(); child.method(); } }
출력
ch7-11 super() - 조상의 생성자
-조상의 생성자를 호출할때 사용
-조상의 멤버는 조상의 생성자를 호출해서 초기화
class Point{ int x,y; Point(int x, int y){ this.x=x; this.y=y; } } class Point3D extends Point{ int z; Point3D(int x, int y , int z){ super(x,y); // 조상 클래스의 생성자 Point(int x, int y) 호츨 this.z=z; // 자신의 멤버 초기화 } } public class Main { public static void main(String[] args) { Point3D point3D = new Point3D(2,3,4); System.out.println(point3D.x); System.out.println(point3D.y); System.out.println(point3D.z); } }
출력
class Point3D extends Point{ int z; Point3D(int x, int y , int z){ this.x=x; this.y=y; this.z=z; // 자신의 멤버 초기화 }
super()을 사용하지 않고 참조변수 this를 사용하면
- 생성자의 첫 줄에 반드시 생성자를 호출해야 한다. 그렇지 않으면 컴파일러가 생성자의 첫줄에 super(); 을 삽입class Point{ int x,y; Point(){ this(0,0); } Point(int x, int y){ this.x=x; this.y=y; } }
위의 코드는 아래와 같다.
class Point extends Object{ int x,y; Point(){ this(0,0); // 생성자 호출 } Point(int x, int y){ super(); //Object 생성자 호출 this.x=x; this.y=y; } }
생성자의 첫 줄에 생성자를 호출하지 않은 경우 )
class Point {
int x;
int y;
Point(int x,int y){
//super() 컴파일러가 삽입 -> Object();
this.x =x;
this.y=y;
}
String getLocation(){
return "x:" + x + " y:"+y;
}
}
class Point3D extends Point{
int z;
Point3D(int x, int y ,int z){
//super() 컴파일러가 삽입 -> Point();를 호출
this.x=x;
this.y=y;
this.z=z;
}
//조상의 getLocation()을 오버라이딩
String getLocation(){
return "x:" + x + " y:"+y +" z:"+z;
}
}
public class Main {
public static void main(String[] args) {
Point3D p = new Point3D(1,2,3);
System.out.println(p.getLocation());
}
}
해당 오류가 발생한다.
해결방법 1)
class Point {
int x;
int y;
Point(){ //기본 생성자 작성
}
String getLocation(){
return "x:" + x + " y:"+y;
}
}
class Point3D extends Point{
int z;
Point3D(int x, int y ,int z){
this.x=x;
this.y=y;
this.z=z;
}
String getLocation(){
return "x:" + x + " y:"+y +" z:"+z;
}
}
public class Main {
public static void main(String[] args) {
Point3D p = new Point3D(8,5,3);
System.out.println(p.getLocation());
}
}
해결방법 2)
class Point {
int x;
int y;
Point(int x,int y){
this.x =x;
this.y=y;
}
String getLocation(){
return "x:" + x + " y:"+y;
}
}
class Point3D extends Point{
int z;
Point3D(int x, int y ,int z){
super(x,y); //조상의 생성자 Point(int x, int y)를 호출
this.z=z;
}
String getLocation(){
return "x:" + x + " y:"+y +" z:"+z;
}
}
public class Main {
public static void main(String[] args) {
Point3D p = new Point3D(8,5,3);
System.out.println(p.getLocation());
}
}
출력
728x90
'TIL > 남궁성의 자바의 정석' 카테고리의 다른 글
자바의 정석 ch7-15, 16 import문, static import문 (0) | 2023.12.01 |
---|---|
자바의 정석 ch7-12~14 패키지, 클래스 패스 (0) | 2023.11.30 |
자바의 정석 ch7-7~9 오버라이딩 (2) | 2023.11.23 |
자바의 정석 ch7-5,6 단일상속, Object클래스 (4) | 2023.11.22 |
자바의 정석 ch7-3,4 포함 (1) | 2023.11.22 |