오버로드(재사용)
메서드의 이름을 재사용하여 다른 기능을 해주는 메서드를 만드는 기능
오버로드 조건
1) 메서드의 이름이 같아야 한다.
2) 매개변수의 개수 또는 타입으로 구분한다.
3) 반환 타입(값)은 관계없다. 즉 반환 값으로 구분하지 않는다.
오버라이드(재정의)
자식 클래스에서 동일한 메서드를 재정의하여 사용하는 것
즉, 부모의 특정 메서드를 내 필요에 따라 다시 정의하여 다른 기능으로 또는 다른 기능을 추가하여 사용하는 것
재정의하면 부모 객체의 메서드를 자식 객체의 메서드로 대체해버린다.
super()
부모 객체의 메서드 기능에 추가적으로 내 기능을 더하고 싶으면 super라는 지시어를 통해 부모 메서드를 호출할 수 있다.
super.메서드명()으로 호출하면 된다.
인터페이스(Interface)
추상화보다 더 높은 추상화 개념을 적용한 클래스
멤버 변수는 가지지 못하며, 추상 메서드만 가진다.
인터페이스 제약사항
1) 모든 멤버 메서드는 추상 메서드(public abstract)만 가질 수 있다.
2) 모든 멤버변수는 상수(public static final)만 가질 수 있다.
단, static 메서드와 디폴트 메서드는 예외이다.
인터페이스 구현
인터페이스는 형태만 있는 것이므로 반드시 자식 클래스에서 구현해야 한다,
즉, 인터페이스를 상속하는 자식은 반드시 추상 메서드를 구현해야 한다.
인터페이스 상속
인터페이스 상속이 가능하다. 인터페이스는 implements로 상속할 수 있다.
클래스는 단일 상속이지만, 인터페이스는 다중 상속이 가능하다.
Practice
public class InterfaceExam1 {
public static void main(String[] args) {
flyingCar car = new flyingCar("플라잉카");
System.out.println(car.getName());
car.flying();
car.landing();
flyingJeep jeep = new flyingJeep("플라잉지프");
flyingTruck truck = new flyingTruck("플라잉트럭");
System.out.println("=========================");
System.out.println("=========================");
//인터페이스를 통한 활용
// flyingConcept a1 = (flyingConcept)car;
// a1.flying();
//위에 두줄을 한 줄로 요약
((flyingConcept)car).flying();
((flyingConcept)jeep).flying();
((flyingConcept)truck).flying();
System.out.println("=========================");
print(car);
print(jeep);
print(truck);
}
public static void print(flyingConcept fly) {
System.out.println("====================");
fly.flying();
fly.landing();
System.out.println("====================");
}
}
//기본 클래스
class Car{
private String name;
public Car(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getSpeed() {
return 100;
}
}
//날아다녀야한다는 개념 및 컨셉을 강제화한 인터페이스를 만든다.
interface flyingConcept{
public abstract void flying(); //날아다닌다
public abstract void landing(); //착륙한다
}
//플라잉카를 만드는 방법
class flyingCar extends Car implements flyingConcept{
flyingCar(String name){
super(name);
}
@Override
public void flying() {
System.out.println("날 수 있는 자동차입니다.");
}@Override
public void landing() {
System.out.println("자동차가 착륙합니다.");
}
}
class flyingJeep extends Car implements flyingConcept{
public flyingJeep(String name) {
super(name);
}
@Override
public void flying() {
System.out.println("날 수 있는 지프입니다.");
}
@Override
public void landing() {
System.out.println("지프가 착륙합니다.");
}
}
class flyingTruck extends Car implements flyingConcept{
public flyingTruck(String name) {
super(name);
}
@Override
public void flying() {
System.out.println("날 수 있는 트럭입니다.");
}
@Override
public void landing() {
System.out.println("트럭이 착륙합니다.");
}
}

static
1) static 지시어를 사용하면 동일한 클래스로 만들어진 모든 객체들이 공유하는 공유 변수 또는 함수가 된다.
2) 멤버 변수 앞에 사용하면 변수를 클래스의 공용 변수로 만든다.
3) 멤버 함수(메서드) 앞에 사용하면 함수를 클래스의 공용 함수로 만든다.
4) static 변수명은 일반적으로 영문 대문자만 사용한다.
static 변수
static 변수는 공용으로 사용하기 위한 메모리 공간을 만들어 동일 클래스로 객체화된 모든 객체들이 공용으로 이용하는 변수이다.
static 메서드도 static 변수와 동일한 개념이지만 일반적으로 메소드는 클래스와 관련된 것들에 기능을 포함하기위한 가독성 목적으로 더 많이 사용된다.
static 메서드
1) static 멤버 변수를 가질 수 없다.
2) 독립적으로 사용되는 메서드로 아무대서나 정의하여 사용할 수 있지만
3) 가독성 및 유지보수등을 위해 일반적으로 관련 있는 곳에 모아 놓는다.
Practice

final
final은 모든 변수 클래스 메서드 등의 앞에 사용가능하지만, 기본적인 개념은 최종이라는 큰 맥락을 가지고 있다.
멤버 변수 또는 일반 변수에서 사용 시 값을 변경 할 수 없는 상수가 된다.
클래스에서 사용 시 변경될 수 없는 또는 상속될 수 없는 클래스를 의미한다.
메소드에서 사용 시 변경될 수 없는 메서드로 오버라이드를 통해 재정의될 수 없다.
Practice

젊음은 알지 못한 것을 탄식하고 나이는 하지 못한 것을 탄식한다. - 앙리 에스티엔 -
'IT Study > 따즈아 Java & Java 기초' 카테고리의 다른 글
Java - math/Calender/Date (0) | 2022.12.25 |
---|---|
Java - object/string 클래스 (0) | 2022.12.25 |
Java - 형변환, 다형성 (0) | 2022.12.25 |
Java - 추상클래스, 캡슐화 (0) | 2022.12.25 |
Java - 상속 (0) | 2022.12.25 |
댓글