728x90

[조건]

  • 각각의 클래스 생성
  • 샌드위치 재료를 표시하는 메소드 정의
  • 공통 부분은 오버라이딩
public static void main(String[] args){
    Sandwich sandwiches = new Sandwich[3];
    sandwiches[0] = new EggSandwich();
    sandwiches[1] = new ChickenSandwich();
    sandwiches[2] = new BeefSandwich();

    for(Sandwich sandwich : sandwiches){
        sandwich.cook();
        System.out.println("-------------");
    }
}

class EggSandwich{
    public String name;

    public EggSandwich(){
        this("계란 샌드위치")
    }

    public EggSandwich(String name){
        this.name = name;
    }

    public void cook(){
        System.out.println(this.name + "의 재료는?");
        System.out.println("식빵");
        System.out.println("양상추");
        System.out.println("피클");
        System.out.println("계란");
    }
}

class ChickenSandwich extends EggSandwich{
    public ChickenSandwich(){
        super("치킨 샌드위치")
    }

	@Overriding
    public void cook(){
        super.cook();
        System.out.println("치킨");
    }
}

class BeefSandwich extends EggSandwich{
    public BeefSandwich(){
        super("소고기 샌드위치")
    }

    @Overriding
     public void cook(){
        super.cook();
        System.out.println("소고기");
    }
}

[반성할 점]

  • 오버라이딩 후 부모 클래스의 메소드를 가져올때 super.메소드 이름을 하여 가져올 수 있다.
728x90

'Java' 카테고리의 다른 글

인터페이스  (0) 2023.06.08
추상클래스  (0) 2023.06.08
클래스 - 3  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07
클래스 - 1  (0) 2023.06.07
728x90

1. 접근제어자(Access Modifier)

private 해당 클래스 내에서만 접근 가능
public 모든 클래스에서 접근 가능
default 같은 패키지 내에서만 접근 가능 (접근 제어자가 없을 경우 default)
protected 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스에서 접근 가능
  • 멤버 또는 클래스에 사용되어 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 함
  • 접근제어자는 클래스 / 멤버변수 / 메서드 / 생성자에서 사용된다.
  • 클래스 내부에서 선언된 데이터를 보호하기 위해 사용함(객체지향의 캡슐화에 해당됨)
  • 데이터를 외부에서 함부로 변경하지 못하도록 하기 위함

 

2. 상속(Inheritance)

  • 자식 클래스가 부모 클래스의 기능을 사용할 수 있는 것.
  • 접근 제어자가 private을 갖는 필드나 메서드는 상속 불가
  • 패키지가 다를 경우 접근제어자가 default인 경우 상속 불가
  • 중복된 코드를 줄일 수 있고, 유지보수가 편리한 장점이 있음
public class Cafe{
    String coffee;
    int price;
    
    public void menu(){
    	System.out.println(coffe + "는 " + price + "원 입니다.");
    }
}

public class HelloCafe extends Cafe{
    HelloCafe(String coffee, int price){
        this.coffee = coffee;
        this.price = price;
    }
}

public static void main(String[] args){
    HelloCafe hc = new HelloCafe("아메리카노", 1500);
    hc.menu();
}

// 출력결과 ==> 아메리카노는 1500원 입니다.

 

3. 메소드 오버라이딩

  • 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하여 사용하는 것.
  • 부모 메소드의 이름, 리턴 타입, 매개변수의 개수, 자료형과 순서를 동일하게 해야한다.
  • 자식 클래스에서 부모의 메소드를 수정해야할 때 사용한다.
  • 부모 메소드는 은닉되고, 자식 클래스에서 재정의된 메소드만 호출된다.(super로 부모 메소드 호출 가능)
public class Exercise {
	public String name;
    
    public Exercise(){
    	this("운동")
    }
    
    public Exercise(String name){
    	this.name = name;
    }
    
    public void effective(){
    	System.out.println(this.name + "의 주요 효과는 다이어트입니다.");
    }
}

public class Soccer extends Exercise {
    public Soccer(){
        super("축구");
    }

    @Override
    public void effective(){
        System.out.println(this.name + "의 주요 효과는 심폐지구력 향상입니다.");
    }
}

 

4. 열거형(Enum)

  • 클래스 처럼 보이게 하는 상수, 서로 관련 있는 상수들끼리 모아 상수들을 정의 한 것이다.
  • 열거형으로 선언된 순서에 따라 0부터 index의 값을 가진다.
  • 열거형으로 지정된 상수는 모두 대문자로 선언한다.
  • 열거형 변수 선언 후 세미콜론은 사용하지 않는다.
  • 상수와 특정 값을 연결 시킬 경우 마지막에 세미콜론을 붙여주어야 한다.
enum Phone{
    GB(512), TB(1);

    private final int capacity;

    Phone(int capacity){
        this.capacity = capacity
    }
    
    public int getCapacity(){
    	return capacity;
    }
}

public static void main(String[] args){
    Phone phone = Phone.GB;
    System.out.println("휴대폰의 용량은 " + phone);

    for(Phone cp : Phone.values()){
        System.out.println("휴대폰의 용량은 " + cp.getCapacity);
    }

}
728x90

'Java' 카테고리의 다른 글

추상클래스  (0) 2023.06.08
클래스 - 샌드위치 만들기  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07
클래스 - 1  (0) 2023.06.07
메소드 - 개인정보 일부 비공개 하기  (0) 2023.06.07
728x90

1. 메소드 오버로딩

  • 같은 이름의 메소드를 여러 번 선언
  • 매개변수의 타입이나, 개수가 달라야 한다.
  • 매번 메소드를 호출할 때마다 값을 넣어주지 않고 고정 하고 싶다면 info(값) 처럼 작성할 수 있음
void info(String manufacture, int capacity){
    System.out.println("휴대폰 제조사는 " + manufacture + " 입니다");
    System.out.println("휴대폰 용량은 " + capacity + "GB 입니다");
}

void info(){
    info("애플", 256); // 위의 info 메소드 호출
}

 

2. 클래스 메소드

static void serviceCenter(){
    System.out.println("서비스 센터의 전화번호는 02-1234-1234 입니다");
}

// 사용법
클래스이름.메소드이름(); // 호출 가능
  • static이 붙지 않은 메소드는 객체마다 서로 다른 동작을 한다.(인스턴스 변수의 값이 다르기 때문에)
  • static이 붙은 클래스 메소드는 항상 같은 동작만 한다.
  • 객체를 생성하지 않더라도 호출할 수 있다.
  • 메소드 내에서 인스턴스 변수가 사용되지 않을 경우,
  • 전달 받은 값만 처리하고 반환하려고 할때  클래스 메소드를 사용한다.

 

3. This

public class Phone {
    String name;

    void phoneInfo(String name){
        this.name += name;
    }
}

public static void main(String[] args){
	Phone phone = new Phone();
	phone.name = "아이폰14Pro";
	phone.phonInfo(" 2023년형");
}

// 출력 결과 ==> 아이폰14Pro 2023년형
  • 객체, 자기 자신을 나타낸다
  • this.name은 클래스 인스턴스 변수로 선언된 name을 말한다.
  • name은 전달 값으로 전달 받은 String name을 나타낸다.

 

4. 생성자(Constructor)

  • new연산자를 통해 인스턴스가 생성될 때 호출되고 제일 먼저 실행되는 메서드
  • 인스턴스 변수를 초기화 시키는 역할을 한다.
  • new 연산자가 인스턴스 생성 하는 것 (생성자가 인스턴스 생성하는 것은 아님!)
  • 생성자가 정의 되어 있지 않을 경우 컴파일러가 알아서 기본 생성자를 추가해서 컴파일 한다.
// 클래스이름(){}
Phone(){ // 기본 생성자

}

// 클래스이름(매개변수){}
Phone(String name, int capacity){ // 매개변수가 있는 생성자
    this.name = name;
    this.capacity = capacity;
}

 

5. Getter & Setter

  • OOP에서는 객체 외부에서 직접적인 접근을 막는다.
    • 외부에서 데이터를 읽고 변경 시 객체의 무결성이 깨질 수 있기 때문
    • 메소드를 통해 데이터를 변경한다.
  • 접근제어자 private은 해당 클래스 내에서만 접근 가능함
  • Setter : private으로 선언된 변수의 값을 수정할때 사용
  • Getter : 데이터를 읽어올때 사용
class Phone(){
    private String name;
    private int capacity;

    public String getName(){
        return name;
    }

    public String setName(String name){
        this.name = name;
    }

     public int getcapacity(){
        return capacity;
    }

    public int setcapacity(int capacity){
        this.capacity = capacity;
    }
}

public static void main(String[] args){
    Phone phone = new Phone();
    phone.setName("아이폰14Pro Max");
    phone.setCapacity(512);

    System.out.println("이름 : " + phone.getName());
    System.out.println("용량 : " + phone.getCapacity() + "GB");
}

 

728x90

'Java' 카테고리의 다른 글

클래스 - 샌드위치 만들기  (0) 2023.06.07
클래스 - 3  (0) 2023.06.07
클래스 - 1  (0) 2023.06.07
메소드 - 개인정보 일부 비공개 하기  (0) 2023.06.07
배열 - 신발 사이즈 옵션 출력하기  (0) 2023.06.07

+ Recent posts