728x90
오버라이딩
- 슈퍼클래스의 메서드와 동일한 메서드 명과 인수로 재구현 하는 방식
- 슈퍼클래스의 메서드를 재구현 할 때 @Override 어노테이션이 붙는다.
package kr.or.ksmart;
class Car{
private int num;
private int gas;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getGas() {
return gas;
}
public void setGas(int gas) {
this.gas = gas;
}
}
class Bus extends Car{
@Override
public void setGas(int gas) {
super.setGas(gas + 1000); //부모의 메서드를 재가공 구현
}
}
class Sport extends Car{
@Override
public void setGas(int gas) {
super.setGas(gas + 500); //부모의 메서드를 재가공 구현
}
}
public class JavaBasic01 {
public static void main(String[] args) {
String type = "Sport";
Car car = null;
if("car".equals(type)) {
car = new Car();
}else if("bus".equals(type)) {
car = new Bus();
}else if("sport".equals(type)) {
car = new Sport();
}
car.setGas(1000);
System.out.println(car.getGas() + " <-- "+type+" gas");
}
}
실습1.
Car2라는 클래스가 있다. Car2의 필드에는 String 타입의 number 변수가 있다. setNumber, getNumber를 가지고 있다. Car2를 상속받아 구현된 클래스는 Bus2 와 Sport2클래스가 있으며, Bus2와 Sport2의 클래스에서 Car2의 메서드 setNumber를 오버라이딩하여 메서드를 재구현하였다. Bus2와 의 클래스에서 getNumber 메서드를 호출시 Bus2 클래스의 getNumber 결과 값은 'B 번호'로 가공 되서 결과물 출력 , Sport2클래스는 getNumber 결과값은 'S 번호'로 가공되서 결과물이 출력 되도록 하여라.
package kr.or.ksmart;
class Car2{
private String number;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
class Bus2 extends Car2{
@Override
public void setNumber(String number) {
super.setNumber("B "+number);
}
}
class Sport2 extends Car2{
@Override
public void setNumber(String number) {
super.setNumber("S "+number);
}
}
public class JavaBasicEx02 {
public static void main(String[] args) {
String type = "sport2";
Car2 car2 = null;
if("car2".equals(type)) {
car2 = new Car2(); //슈퍼클래스가 잘 정의 되었는지 확인
}else if("bus2".equals(type)) {
car2 = new Bus2(); // 서브 클래스 재가공확인
}else if("sport2".equals(type)) {
car2 = new Sport2(); // 서브 클래스 재가공확인
}
car2.setNumber("1056");
System.out.println(car2.getNumber());
}
}
final
- 더 이상 변경이 불가능 하도록 만드는 키워드
상수 : final 키워드가 붙으며 변수명은 주로 대문자로 쓰인다. 상수는 변하지 않는 값, 객체화 되면서 메모리를 차지할 필요가 없다.(클래스 변수)
메서드 : 메서드에 final이 붙을 경우 오버라이딩을 할 수 없다.
클래스 : 클래스에 final이 붙으면 상속을 할 수 없다.
public class JavaBasic02 {
//상수 만들기
public final static String ADD = "전주시";
public static void main(String[] args) {
//ADD= "전북 전주시";
}
}
final 메서드
class Sample{
public void print(String print){
System.out.println(print);
}
public final void print(String print, String type) {
System.out.println(print+":"+type);
}
}
class SubSample extends Sample{
@Override
public void print(String print) {
super.print(print);
}
}
final이 쓰이지 않은 메서드만 호출 가능
final 메서드가 아닐 경우 - 두개의 메서드를 다 쓸 수 있음
final 클래스
final class Sample{
public void print(String print){
System.out.println(print);
}
public final void print(String print, String type) {
System.out.println(print+":"+type);
}
}
class SubSample extends Sample{
@Override
public void print(String print) {
super.print(print);
}
}
반응형
'Backend > JAVA' 카테고리의 다른 글
JAVA - hashCode( ) (0) | 2020.04.29 |
---|---|
JAVA 추상 클래스 (0) | 2020.04.27 |
JAVA 다형성 (0) | 2020.04.22 |
JAVA 상속 (0) | 2020.04.22 |
JAVA 생성자 설계하기 (0) | 2020.04.22 |
댓글