예제
class Person{
//Field
String name;
int age;
int weight;
//Constructor
Person(){}
Person(String name,int age, int weight){
this.name = name;
this.age = age;
this.weight = weight;
}
//Method
void wash() {System.out.println("씻다.");}
void study() {System.out.println("공부하다.");}
void play() {System.out.println("놀다.");}
}
interface Allowance{
//Field
//변수는 안되나 상수는 되므로 상수로 지정해주면 됨 -> public static final을 붙여주면 됨.
//인터페이스내 모든 멤버필드(변수)는 public static final이므로 생략이 가능하기때문에, 타입 상수명만 지정해서 쓰면된다.
public static final String constant1 = "한국";
int constant2 = 10;
//Abstract Method
//인터페이스내 모든 메서드는 public abstract이므로 생략이 가능하다.
abstract void in(int price, String name);
void out(int price, String name);
}
interface Train{
//Abstract
abstract void train(int training_pay, String name);
}
class Student extends Person implements Allowance, Train{
//Field
//Construct
Student(){}
Student(String name, int age, int weight){
this.name = name;
this.age = age;
this.weight = weight;
}
//Method
public void in(int price, String name) {System.out.printf("%s에게서 %d원 용돈을 받았습니다.", name, price);}
public void out(int price, String name) {System.out.printf("%d원 금액을 지출했습니다. [지출 : %s] \n", price, name);}
public void train(int training_pay, String name) {System.out.printf("[%s -> %d 입금완료] \n", name, training_pay);}
}
public class oop_Interface01{
public static void main(String[] args) {
// [1] : 객체생성
Student s1 = new Student("홍길동", 20, 85);
// [2] : 클래스와 인터페이스로 부터 상속(Person)과 구현(Allowance, Train)을 한 메서드들 호출하기.
s1.wash();
s1.study();
s1.play();
s1.in(10000, "엄마");
s1.out(5000, "편의점");
s1.train(50000, "아빠");
System.out.println();
// [3] : 상수필드 사용하기
System.out.println("-- 인터페이스 상수필드 사용 --");
System.out.println(s1.constant1);
System.out.println(s1.constant2);
System.out.println();
System.out.println("-- 인터페이스는 static이므로 메모리영역에 존재하기때문에,객체생성없이 출력가능하다. --");
System.out.println(Allowance.constant1);
System.out.println(Allowance.constant2);
}
}
씻다.
공부하다.
놀다.
엄마에게서 10000원 용돈을 받았습니다.5000원 금액을 지출했습니다. [지출 : 편의점]
[아빠 -> 50000 입금완료]
-- 인터페이스 상수필드 사용 --
한국
10
-- 인터페이스는 static이므로 메모리영역에 존재하기때문에,객체생성없이 출력가능하다. --
한국
10
클래스와 인터페이스 정의
클래스와 인터페이스를 정의하는 방법
- 클래스 Person : Person 클래스를 정의한다. name, age, weight을 필드로 가지며, 생성자를 통해 객체를 초기화한다. 또한 동작을 나타내는 wash(), study(), paly() 메서드구현해 기본적인 필드와 메서드를 정의하였다.
- 인터페이스 Allowance : 인터페이스를 사용하여 용돈과 관련된 정보를 정의하는 Allowance 인터페이스를 만든다. constant1와 constant2라는 상수 필드를 정의하고, in(int price, String name)과 out(int price, String name) 두 개의 추상 메서드를 선언한다.
- 인터페이스 Train : 다중상속의 이해를 돕기위해, 또 다른 인터페이스인 Train을 정의한다. 이 인터페이스에는 train(int training_pay, String) 이라는 추상 메서드가 있다.
클래스 상속과 인터페이스 구현
클래스 상속과 인터페이스 구현을 통해 확장하는 방법
- 클래스 Student : Person 클래스를 상속받는 Student 클래스를 정의한다. 이 클래스는 Allowance, Train 인터페이스를 모두 구현한다. Student 클래스에는 생성자를 통해 객체를 초기화하고, Allowance 인터페이스의 in(), out() 메서드와 Train 인터페이스이 train() 메서드를 구현한다.
객체 생성과 메서드 호출
클래스와 인터페이스로부터 객체를 생성하고, 메서드를 호출하는 방법
- main 메서드 : main메서드에서는 Student객체를 생성하여 다양한 동작을 수행한다. wash(), study(), paly() 메서드는 Person클래스로부터 상속받은 것이며, in(), out(), train()메서드는 Studnet 클래스에서 구현한 것이다. 이를 통해 객체의 상속과 인터페이스 구현에 따라 다양한 메서드를 호출할 수 있다.
상수필드 사용
- 상수필드 constant : Allowance인터페이스에서 선언한 constant1, constant2는 자동으로 public, static, final로 선언되어 상수가 된다. Student클래스에서는 이러한 상수 필드를 바로 사용할 수 있으며, 또한 인터펭스 이름을 통해 접근할 수도 있다.
이렇게 자바의 객체지향 프로그래밍에서는 클래스와 인터페이스를 통해 기능을 구현하고 확장할 수 있다. 이러한 기능들을 활용하여 유연하고 확장 가능한 프로그램을 작성할 수 있다.
'Java > JAVA 100 문제 풀이' 카테고리의 다른 글
자바 part.4 문제풀이 - 자바 다형성 : super와 casting사용 (0) | 2023.07.27 |
---|---|
자바 part.4 문제풀이 - 자바의 다형성(polymorphism) (0) | 2023.07.27 |
자바 part.4 문제풀이 - 다중 상속을 가능하게 하는 인터페이스(Interface) (0) | 2023.07.26 |
자바 part.4 문제풀이 - 추상 클래스(Abstract Class)개념, 필요 (0) | 2023.07.26 |
자바 part.3 문제풀이 - 객체배열의 이해와 다형성 활용 (0) | 2023.07.25 |