앞의 두요소 비교하여 왼쪽값이 더 크면 교환, 끝까지 돌고 맨 마지막 요소빼고 다시 정렬반복
-> 오름차순 정렬된다.
for(int i = len; i>0; i--){
for(int j = 0; j<5; j++){
if(lotto[j]<lotto[j+1]){
temp = lotto[j];
lotto[j+1] = lotto[j];
lotto[j]=temp;
}
}
}
최솟값을 찾아 맨앞의 요소와 바꾼다. 처음위치를 빼고 반복한다.
for(int i = 0; i<length;i++){
max = 0;
for (int j = i ; j < length; j++) {
if (lotto[j] > max) {
max = lotto[j];
lotto[j] = lotto[i];
lotto[i] = max;
}
}
}
->내림차순 정렬이라 max 사용 큰값을 맨 앞으로 정렬한다.
this는 같은 class내의 다른메서드(생성자)호출할 때
super는 상위 class의 메서드(생성자) 호출할 때
class A extends B{}
B b = new A():
📢※ 하지만 A클래스에서 B클래스 메서드 재정의한 메서드인 경우 b는 A의 재정의된 메소드를 호출한다.(기존의 B클래스 메서드는 은닉되어 바로접근 불가. A클래스 재정의된 메서드에서 기존 B클래스 메서드 호출해서 접근해야함)
A a = (A)b;
public void engineer(Car cd){
// if문으로 들어온 타입이 어떤 자식 타입인지 물어봐서 그에 맞는 캐스팅으로 해준다
if(cd instanceof EfSonata) { //오른쪽 타입이 왼쪽과 같거나 super 타입이면 true 반환
EfSonata efs = (EfSonata) cd;
System.out.println("efs의 주소: " + efs);
System.out.println("efs.i = " + efs.i);
}
System.out.print(cd.carname+" 수리완료!\t");
System.out.println("청구비용"+cd.cost+" 원");
}
print는 (변수.toString())로 되어있지만 toString이 생략된 형태이다.
Object.toString()은 주소값을 나타내는 메서드
String.toString()은 문자열을 출력해주는 메서드(object 메서드 오버 라이딩)
String str;
public String(String str){
this.str=str;
}
public String toString(){
return str;
}
String 클래스에 이런식으로 재정의 되어있다.
String s03=new String("월요일");
월요일->생성자->전역변수->toString메서드->return
Object.equals(==과 같은 기능) 주소값을 비교한다.
String.equals(문자열 비교 기능) 문자열을 비교한다.
String은 constant이므로 변경 불가 하다.
str = "문자열"
str = "문자열2"
->이거는 객체를 새로생성하는거지 변경하는게 아니다.
변경은 StringBuffer, StringBuilder등을 사용한다.
public class MainApp {
public static void main(String[] args) {
ElecFunction elec[] = new ElecFunction[5];
elec[0] = new Tv("A01", 500000, 12);
elec[1] = new Tv("A02", 2500, 20);
elec[2] = new Tv("A03", 3000, 30);
elec[3] = new Audio("A04", 8500, 200);
elec[4] = new Audio("A05", 700, 100);
for (ElecFunction e : elec) {
System.out.println(e);
}
}
}
TV, Audio클래스는 Elec 클래스를 상속받고, Tv, Audio에서 각기 다른 toString메서드를 재정의하여 사용중이다.
elec[1] = new Tv("A02", 2500, 20);
이코드를 보면 부모타입이 자식타입 객체를 참조하고 있지만, 자식타입의 toString메서드를 사용하고 있다.
앞선 enginner 예제에서는, 부모타입은 자식타입의 메서드를 사용할 수 없어서 형변환을 통해 사용하였다.
이 코드는 어떻게 형변환 없이 사용할 수 있었을까?
📢 재정의한 메소드는 부모타입에서 사용하더라도, 재정의한 메소드를 호출하기 때문이다.
상수: 고정값, 값변경 불가
static final int a = 10;
final 변수
final int a;
Test(int a){
this.a=a;
}
new Test(10);
new Test(20);