Sponsored By
















 

상속(Inheritance) 에 관한 사용방법임.

 

 

 

 

 

 

00_1. 상속을 하기전에 이번에는 Typing하지말고 

'마우스오른쪽버튼' -> 'Sources -> 'Generate Getters and Setters...' 를 눌러서 만들어보자. 

'toString()'메소드도 마우스를 이용해서 만들어보자.







00_2. 객체를 만들고 객체를 출력시키면 toSrting()메소드가 작동하여 출력된다.







01_1. 상속을 할때에는 접근권한을 'protected'로 변수들을 보호해줘서 상속받는 클래스에서 사용가능하게 

        만들어줌. 또한, 상속받는 클래스에서는 'extends' 를 붙여 클래스를 상속받는다.







01_2. 출력을 해보면 'sc'객체를 만들어서 'I am SportsCar'가 출력되려고하는데 상속받은 것이있어서 

부모클래스의 'I am Car' 가 먼저 출력되는 것을 확인할 수 있다.






02_1. data 값을 지정해주고 변수/ this.변수/ super.변수/ 값들을 비교해보자.







02_2. 'print()'함수내에 있는 data값이 '200.34'이므로 그대로 출력이된다.

this.data 는 그 함수내에 있는-this- data값이므로 이것역시 '200.34' 가 출력된다.

super.data 는 부모클래스의 있는 data 값이므로 '100' 이 출력된다.







03_1. 생성자에 파라미터값을 지정하고 출력을 하면 기본생성자로 출력이 됨을 볼 수 있다.

부모클래스를 불러오지 않았기 때문에 'default' 인 생성자로 호출되는 것이기 때문이다.

 

 

 

 

 

03_2. 출력물 어디에도 'I am a SportsCar with sth'을 찾아볼 수 없다.







※. 코드

 

 

class Car {

protected String color;  // 상속받는 애들도 볼 수 있게 접근권한을 protected로 준다.

protected int speed;

protected String name;

 

int data = 100;  // 변수의 override를 테스트하기 위한 Package변수.

 

public Car()

{

/* this.color = "UnknownColor";

this.name = "Unknown";

this.speed = (int) (Math.random() * 100); */

 

this("Unknown", "UnknownColor");  // 밑에 코드에 Unknown UnknownColor를 넣으면 똑같아 지기때문에 이렇게 사용해도 된다.

// this() 메소드는 코드의 맨 처음에 와야만 한다. 

System.out.println("I am Car");

}

 

public Car(String name, String color) { // 생성자

this.color = color;

this.name = name;

this.speed = (int) (Math.random() * 100);

}

 

 

 

/* Getters and Setters */

public String getColor() {

return color;

}

 

public void setColor(String color) {

this.color = color;

}

 

public int getSpeed() {

return speed;

}

 

public void setSpeed(int speed) {

this.speed = speed;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

 

public void print()

{

System.out.println("car.print() 마음에 안드는 코드");

}

 

 

 

@Override

public String toString() {

return "Car [color=" + color + ", speed=" + speed + ", name=" + name + "]";

}

 

}// Car Class

 

 

 

 

class SportsCar extends Car {

private boolean turbo = false;

 

//int data = 200;  // for variable override temporary.

double data = 200.34;  // 변수는 데이터타입이 달라도 이름만 같으면 overriding 된다. 

 

public SportsCar()

{

//super();  // super(); 메소드 역시 코드의 맨 위에 위치해 있어야 한다.

super("BMW", "YELLOW");  // Car(String , String ); 를 의미.

System.out.println("I am SportsCar");

 

}

 

public SportsCar(String name, String color)

{

// super(name, color); 

// ㄴ 부모(super)를 지정하지 않으면 무조건 default constructor를 호출한다.

System.out.println("I am SportsCar with sth");

}

 

 

 

@Override

public void print() {

 

super.print();  // 메모리에 가지고 있음을 확인 할 수 있다.

System.out.println("sportscar print() 재정의");

 

System.out.println("data =  "+ data); // 200 예상

System.out.println("this.data =  "+ this.data); // 200 예상

System.out.println("super.data =  "+ super.data); //100 예상

 

}

 

 

 

public boolean isTurbo() {

return turbo;

}

 

public void setTurbo(boolean turbo) {

this.turbo = turbo;

}

 

 

 

@Override

public String toString() {

return "SportsCar [turbo=" + turbo + ", color=" + color + ", speed=" + speed + ", name=" + name + "]";

}

 

 

 

}// SportsCar Class

 

 

 

 

 

public class Test {

 

public static void main(String[] args) {

 

Car taxi = new Car("taxi", "RED");

Car bus = new Car("bus", "BLUE");

 

System.out.println(taxi);

System.out.println(bus);

 

SportsCar sc = new SportsCar();

 

System.out.println(sc);

 

sc.print();

 

 

 

}// main

 

}// Main Class

 

 









 



Sponsored By















+ Recent posts