📝

ITスクール DAY14 Constructor/Inhertance

2023/07/26に公開

Constructor

概念は理解しているが、課題のレベルが上がった気がする。
二つ以上のクラスを扱うため、その関係性をしっかり把握し、メインクラスを組むことが重要になった。

点数クラス

<点数>

Score
package oop20230726;

//f
public class Jumsu {
	private int no;
	private String name;
	private int[] answer = new int[5]; //답안 제출
	private char[] ox = new char[5]; //'O' or 'X'
	public int score;
	public int rank;
//f end	
//c	
public Jumsu() {}

public Jumsu(int no, String name, int a, int b, int c, int d, int e){
	this.no = no; 
	this.name = name;
	this.answer[0] = a;
	this.answer[1] = b;
	this.answer[2] = c;
	this.answer[3] = d;
	this.answer[4] = e;
	this.rank = 1;
}//c end
	
//m

public void compute() {
	
	int[] dap = {3,3,3,3,3};
	for(int idx = 0; idx<dap.length; idx++) {
		if(dap[idx] == answer[idx]) {
			ox[idx] = 'O';
			score = score + 20;
		}else {
			ox[idx] ='X';
		}
	  }	
   }

public void disp() {
	System.out.print(this.no+" ");
	System.out.print(this.name+" ");
	System.out.print(this.ox[0]+" ");
	System.out.print(this.ox[1]+" ");
	System.out.print(this.ox[2]+" ");
	System.out.print(this.ox[3]+" ");
	System.out.print(this.ox[4]+" ");
	System.out.print(this.score+" ");
	System.out.print(this.rank+" ");
	System.out.println();
}


	
	

}

点数を実行するクラス

<点数を実行するclass>

ScoreEx
package oop20230726;

public class JumsuTest {

	public static void main(String[] args) {
		//성적 프로그램 
		System.out.println("[시험결과]");
		System.out.println("=====================");
		System.out.println("번호 이름 1 2 3 4 5 점수 등수");
		System.out.println("=====================");
		
		Jumsu[] student = {
			new Jumsu(1,"홍길동",1,3,1,1,1),
			new Jumsu(2,"최길동",1,1,1,1,1),
			new Jumsu(3,"장길동",2,3,3,4,1),
			new Jumsu(4,"오길동",4,1,2,1,1),
			new Jumsu(5,"구길동",1,1,2,3,4),
			new Jumsu(6,"창길동",3,3,3,3,3)
		};
		
		int size = student.length;
		//ox, 점수 구하기
		for(int idx = 0; idx< size; idx++) {
			student[idx].compute();
		}
		//등수 구하기
		for(int a =0; a<size; a++) {
			for(int b = 0; b< size ; b++) {
				if(student[a].score < student[b].score)
					student[a].rank++;
			}
		}
		
		//출력하기
		for(Jumsu a : student) {
			a.disp();
		}
		
		
	}

}



Inheritance

継承
class AA{ //부모클래스//super/기본(base)클래스
	//필드                   
	//생성자
	//메서드
	public void one() {
		System.out.println("one()---");
	}
	public void two() {
		System.out.println("two()---");
	}
} // class AA end

// (상속)
// class 자식클래스명 extends 부모클래스명
class BB extends AA { //자식/하위/sub클래스/파생(derived)클래스
/*	public void one() {
		System.out.println("one()---");
	}
	public void two() {
		System.out.println("two()---");
	}
	*/
	public void three() {
		System.out.println("three()---");
	}
}// class BB end 

class CC extends BB{}
class DD extends AA{}

//java에서는 클래스는 단일상속만 가능


public class Sangsok1 {

	public static void main(String[] args) {
		AA aa = new AA(); //부모 객체생성 --> 생성자 자동호출
		aa.one();
		aa.two();
//		aa.three();
		
		BB bb = new BB(); //자식 객체생성 --> 생성자 자동호출
		bb.one();
		bb.two();
		bb.three();
		
		CC cc = new CC(); //자식 객체생성 --> 생성자 자동호출
		cc.one();
		cc.two();
		cc.three();
		
		DD dd = new DD(); //자식 객체생성 --> 생성자 자동호출
		dd.one();
		dd.two();
	}

}

スパクラスのコンストラクタ呼び出し
class Korea extends Object {
	//필드
	String name;
	//생성자
	public Korea() {                       //4
		System.out.println("Korea()---");             //5
	    this.name = name;
	}
	// 메서드
}

class Seoul extends Korea{
	
	public Seoul() {                       //2
		super();                                  //3
		System.out.println("Seoul()---");             //6
		
	}
	
}


public class Sangsok2 {

	public static void main(String[] args) {

		Seoul seoul = new Seoul();                    //1
		//자식객체 생성 --(동시에) --> (부모 기본->자식) 생성자 자동 호출  
	}

}

class Father extends Object{
	String name = "아버지";
	int age = 20;
	
	public Father() {System.out.println("Father()---");}
	public Father(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

class Son extends Father{  //부모의 필드와 메소드를 100% 다 받는다 
	public Son() {System.out.println("Son()---");}
	
	public void disp() {
		System.out.println(name);
		System.out.println(age);
	}
	
}

class Daughter extends Father{
	String address;

	public Daughter() {}
	
	public Daughter(String name, int age, String address) { //자식 매개변수 생성자
		//super();     
		//[기본] 부모 기본 생성자 자동호출
		super(name,age);        //[기본] 부모의 매개변수를 갖는 생성자를 자동호출 
		//super.name = name;
		//super.age = age;
		this.address = address;
	}
	
	public void show() {
		System.out.println(name + " " + age + " " + address);
	}
}


public class SuperTest {

	public static void main(String[] args) {
		//      자식객체 생성 --(동시에) --> (부모"기본"->자식"기본") 생성자 자동 호출
		Son son = new Son();
		son.disp();
		
		System.out.println();
		// [원하는 상황] 자식객체 생성 --(동시에) --> (부모"매개변수"->자식"매개변수") 생성자 자동호출
		//      [기본] 자식객체 생성 --(동시에) --> (부모"기본"->자식"매개변수") 생성자 자동 호출
		Daughter jane = new Daughter("김제인",25,"관철동");
		jane.show();
	}
}

//super :   부모의 멤버변수
//super() : 부모의 생성자함수를 호출
//this    : 자신의 멤버변수 접근 (예) this.name = "홍길동";
//this()  : 자신의 생성자함수를 호출


Discussion