Java/OOP

this

yunajoe 2022. 10. 1. 15:06



만약 paramter와  인스턴수 변수 이름이 같을떄는?! => 자바는 인식하지 못한다 
this를 쓰면 된다 

 

 

// 인스턴스 변수와 parameter가 다를때는 아무 문제 없당

public class PersonInfo {
    // 변수 선언
    private String name;

    // 인스턴스 변수 name, 파라미터(parameter)는 pName
    public void setName(String pName){
        name = pName;
    }

    public String getName(){
        return name;
    }
}


// 인스턴스 변수와 parameter가 같을 때는 JAVA는 인식하지 못한다 

public class PersonInfo {
    // 변수 선언
    private String name;

    // 인스턴스 변수 name, 파라미터(parameter)는 pName
    public void setName(String name){
        name = name;
    }  
    public String getName(){
        return name;
    }
}

 

How to solve it?!  

// 이때는 this를 인스턴스 변수 앞에다가 붙여준당 

public class PersonInfo {
    // 변수 선언
    private String name;

    // 인스턴스 변수 name, 파라미터(parameter)는 pName
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
}
public class Main {
    public static void main(String[] args){
        Person p1 = new Person();
        p1.setName("조연아");

    }
}

실습

public class MarketGood {
    // 인스턴스 변수 설정
    private String name;
    private int retailPrice;
    private int discountRate;

    // 생성자 설정
    public MarketGood(String name, int retailPrice, int discountRate){
        this.name = name;
        this.retailPrice = retailPrice;
        if(discountRate < 0 || discountRate > 100){
            this.discountRate =0;
        }
        this.discountRate = discountRate;

    }
    public MarketGood(String name, int retailPrice){
        this.name = name;
        this.retailPrice = retailPrice;
        this.discountRate = 0;
    }

    //getter, setter 메서드
    public String getName(){
        return name;
    }

    public int getRetailPrice(){
        return retailPrice;
    }
    public void setDiscountRate(int discountRate){
        this.discountRate = discountRate;
    }

    public int getDiscountRate(){
        return discountRate;
    }

    // 메서드(할인후 가격을 return)
    public int getDiscountedPrice(){
        return retailPrice * (100-discountRate)/100;
    }  

}


public class Main {
    public static void main(String[] args) {
        MarketGood g1 = new MarketGood("MacBook Air", 1250000);
        MarketGood g2 = new MarketGood("MacBook Pro", 2990000, 15);
        MarketGood g3 = new MarketGood("iPhone 7", 920000, 20);

        System.out.println(g1.getName() + "의 할인율: " + g1.getDiscountRate() + "%");
        System.out.println(g2.getName() + "의 할인율: " + g2.getDiscountRate() + "%");
        System.out.println(g3.getName() + "의 정상 가격: " + g3.getRetailPrice() + "원");
        System.out.println(g3.getName() + "의 할인 가격: " + g3.getDiscountedPrice() + "원");
        System.out.println("경쟁 업체가 많아져서 " + g3.getName() + "의 할인율이 35%로 올랐습니다.");
        g3.setDiscountRate(35);
        System.out.println(g3.getName() + "의 할인 가격: " + g3.getDiscountedPrice() + "원");
    }
}