본문 바로가기
Backend/JAVA

JAVA override && final

by YERIEL_염주둥 2020. 4. 27.
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

댓글