<Point.java> - super class
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package ex01.상속review_input;
public class Point { // super class
protected int x, y;
//protected: 보호모드, 상속받은 자손들 접근 가능
//생성자함수 2개 이상
public Point() {
x=y=50;
System.out.println("Point daeault 생성자함수");
}
public Point(int x, int y) {
this.x = x;
this.y = y;
System.out.println("Point 매개변수2개 생성자함수");
}
public Point(int x) {
this.x = x;
System.out.println("Point 매개변수1개 생성자함수");
}
//getter, setter method
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
//output method
public void display() {
System.out.print("x = " + x + "\ty = " + y);
}
}
|
cs |
▶변수정의를 private로 쓰면->상속으로 연결된 클래스들이 같은 패키지 안에 있다면 사용가능
▶변수정의를 protected로 쓰면->상속으로 연결된 클래스들이 다른 패키지 안에있어도 사용가능
->보호모드, 상속받은 자손들 접근 가능
<Circle.java>
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
package ex01.상속review_input;
import java.util.Scanner;
public class Circle extends Point { // sub class
private int r;
//생성자함수
public Circle() {
//main에서 매번 값 셋팅하기 싫다면
//2.Scanner 이용해서 좌표값 입력받아서 전달
System.out.println("Circle daeault 생성자함수");
Scanner sc = new Scanner(System.in);
System.out.print("r입력 => ");
// this.r=sc.nextInt(); //방법1))this이용
setR(sc.nextInt()); //방법2))set이용
}
public Circle(int r) {
System.out.println("Circle 매개변수1개 생성자함수");
this.r = r;
}
public Circle(int x, int y, int r) {
super(x,y);
this.r = r;
System.out.println("Circle 매개변수3개 생성자함수");
}
//getter, setter method
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
// output method
public void display() {
//super이용 - 부모의 display부르면 됨
super.display(); //=> 부모의 display의미, super는 객체
System.out.println("\tr = " + r);
// System.out.println("x = " + getX() + "\ty = " + getY() + "\tr = " + r);
}
}
|
cs |
▶변수 r을 입력받은 값으로 변경하는 방법
1)this이용: this.r = sc.nextInt();
2)set이용: setR(sc.nextInt());
▶super.display(); -> 부모의 display()메서드를 의미
-> 여기서 super는 객체
<Rectangle.java>
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package ex01.상속review_input;
public class Rectangle extends Point { // sub class
private int x2, y2;
//생성자 함수
public Rectangle() {
System.out.println("Circle daeault 생성자함수");
x2 = y2 = 70;
}
public Rectangle(int x2, int y2) {
this.x2 = x2;
this.y2 = y2;
System.out.println("Point 매개변수2개 생성자함수");
}
public Rectangle(int x, int y, int x2, int y2) {
super(x,y);
this.x2 = x2;
this.y2 = y2;
System.out.println("Point 매개변수4개 생성자함수");
}
//getter, setter method
public int getX2() {
return x2;
}
public void setX2(int x2) {
this.x2 = x2;
}
public int getY2() {
return y2;
}
public void setY2(int y2) {
this.y2 = y2;
}
// output method
public void display() {
System.out.println("x = " + getX() + "\ty = " + getY()
+ "\tx2 = " + x2 + "\ty2 = " + y2);
}
}
|
cs |
<MainEntry.java> - ver1
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
32
|
package ex01.상속review_input;
import java.util.Scanner;
public class MainEntry {
public static void main(String[] args) {
Circle c = new Circle(); //만약 매개변수가 없는 Circle()생성자가 없다면 오류날것
System.out.println("\n1)초기값");
c.display(); //초기값 출력
System.out.println("\n2)값 셋팅");
c.setR(10);
c.setX(100);
c.setY(20);
c.display(); //값 셋팅하고 출력
System.out.println("================================");
Rectangle r = new Rectangle();
r.display(); //초기값 출력
r.setX(5);
r.setX2(6);
r.setY(7);
r.setY2(8);
r.display(); //값 셋팅하고 출력
}
}
|
cs |
Circle c = new Circle();
->만약 매개변수가 없는 Circle()생성자가 없다면 오류날것
(다른 모양의 생성자가 있을 경우만,다른 모양의 생성자가 있으면 default생성자는 기능을 상실함)
->만약 default 생성자만 존재한다면 따로정의하지 않아도 생기기때문에 상관 없다
▶생성자
-사용자가 생성자 함수를 재정의하면 default생성자는 기능상실
->생략불가능(필요하면 직접 써야함)
-생성자가 하나도 없다면, default생성자는 쓰지 않아도 자동으로 생성되어있음
<MainEntry.java> - ver2
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
32
33
34
35
36
|
package ex01.상속review_input;
import java.util.Scanner;
public class MainEntry {
public static void main(String[] args) {
//main에서 매번 값 셋팅하기 싫다면
//2.Scanner 이용해서 좌표값 입력받아서 전달
Circle c = new Circle(); //만약 매개변수가 없는 Circle()생성자가 없다면 오류날것
c.display(); //초기값 출력
System.out.println("================================");
//main에서 매번 값 셋팅하기 싫다면
//1.Scanner 이용해서 좌표값 입력받아서 전달
Scanner sc = new Scanner(System.in);
System.out.print("x값 => ");
int x = sc.nextInt();
System.out.print("y값 => ");
int y = sc.nextInt();
System.out.print("x2값 => ");
int x2 = sc.nextInt();
System.out.print("x2값 => ");
int y2 = sc.nextInt();
Rectangle r = new Rectangle();
r.setX(x);
r.setY(y);
r.setX2(x2);
r.setY2(y2);
r.display(); //값 셋팅하고 출력
}
}
|
cs |
Point daeault 생성자함수
Circle daeault 생성자함수
r입력 => 5
x = 50 y = 50 r = 5
================================
x값 => 6
y값 => 8
x2값 => 68
x2값 => 6
Point daeault 생성자함수
Circle daeault 생성자함수
x = 6 y = 8 x2 = 68 y2 = 6
'JAVA > 12_inheritance' 카테고리의 다른 글
super와 super() (0) | 2021.01.21 |
---|---|
override, toString() (0) | 2021.01.21 |
super()와 this() 모두 생성자 맨앞에 위치해야 한다 (0) | 2021.01.20 |
inheritance - <<2.이클립스 기반 class 만들어 상속>> + super() + this (0) | 2021.01.20 |
inheritance - <<1.코딩레벨로 class 만들어 상속>> (0) | 2021.01.19 |