본문 바로가기
Language/JAVA

JAVA 6일차 - 오버로딩, 오버라이딩, 상속 예제

by 코젼 2022. 6. 27.
728x90
반응형

💾 소스코드

Example.zip
0.02MB

🚩Car, CarSmart클래스를 만들어 차의 문의 개수, 차의 색상, 기어타입, 자동 운전 여부를 작성한다.

//클래스명 : Car
//멤버변수 : 데이터타입-변수명-용도
// int-door-문의개수, String-color-차의색상, String-gearType-기어타입

//생성자
// 매개변수를 3개 갖는 생성자 - 문의개수,색상, 기어타입을 전달받아 멤버변수 초기화
// 기본생성자 - 문의갯수는 3, 색상은 white, 기어타입은 auto로 멤버변수 초기화

//메서드
//toStirng()을 오버라이드 - 모든 멤버 변수를 문자열로 반환
//테스트 코드 : 문의 갯수와 색상, 기어타입이 다음과 같은
// 2개의 Car 인스턴스를 생성하고 정보를 출력
// 1번 인스턴스 - 3, white, auto
// 2번 인스턴스 - 4, red, auto

-------------------------------------------------------------------------------------------------------------------

//클래스명 : CarSmart
//조상클래스 : Car
//멤버변수 : 데이터타입-변수명-용도
//boolean - autoMode - 자동 운전 여부

//생성자
//매개변수를 4개 갖는 생성자 - 문의개수, 색상, 기어타입, 자동운전 모드를 전달받아 멤버변수 초기화
//기본 생성자 - 문의 갯수는 3, 색상은 white, 기어타입은 auto, 자동운전모드는 false로 초기화

//매서드 //toAutoMode - 반환타입 boolean -> 자동운전모드 여부를 반환 - 전달인자 없음
//toString()을 오버라이드 - 모든 멤버 변수를 문자열을 반환
package day_06_27;

public class Test1 {
	public static void main(String[] args) {
//		Car c1 = new Car(); // 1번 인스턴스 - 3, white, auto 
//		Car c2 = new Car(4, "red", "auto"); // 2번 인스턴스 - 4, red, auto

		CarSmart c1 = new CarSmart();
		CarSmart c2 = new CarSmart(4, "red", "auto", true);

		System.out.println(c1);
		System.out.println(c2);
	}
}

class Car {
	int door; // 문의 개수
	String color; // 차의 색상
	String gearType; // 기어 타입

	// 기본 생성자
	Car() {
		this(3, "white", "auto");
	}

	// 매개변수를 3개 갖는 생성자
	Car(int door, String color, String gearType) {
		this.door = door;
		this.color = color;
		this.gearType = gearType;
	}

	@Override
	public String toString() {
		return "문의 개수 : " + this.door + ", 차의 색상 : " + this.color + ", 기어 타입 : " + this.gearType;
	}
}

class CarSmart extends Car {
	boolean autoMode; // 자동 운전 여부

	CarSmart() {
		super(); // Car 클래스의 기본 생성자 호출- Car() {this(3, "white", "auto");}
		this.autoMode = false;
	}

	CarSmart(int door, String color, String gearType, boolean autoMode) {
		super(door, color, gearType); // Car 클래스의 생성자 호출 - Car(int door, String color, String gearType)
		this.autoMode = autoMode;

	}

	boolean toAutoMode() {
		return this.autoMode;
	}

	@Override
	public String toString() {
		return super.toString() + ", 자동 운전 여부 : " + this.toAutoMode();
	}
}

🚩Card 클래스를 만들어 랜덤으로 5장의 카드의 무늬와 숫자를 출력한다.

//클래스명 : Card
//멤버변수 : 데이터타입-변수명-용도
// String-shape-카드의무늬
// int-num-카드의 숫자
// int-height-카드의 세로길이
// int-width-카드의 가로길이

//생성자
//매개변수가 4개인 생성자 : 카드의 무늬와 숫자, 가로 세로 길이를 전달받아
// 멤버변수를 초기화
//매개변수가 2개인 생성자 : 카드의 무늬와 숫자를 전달받아 멤버변수를 초기화하고
// 가로와 세로 길이를 각각 100과 200으로 초기화

//메서드
//toString을 오버라이딩하여 무늬와 숫자, 가로 세로 길이를 출력
//테스트 코드 : 길이가 5인 Card 타입의 배열에 난수로 초기화한 카드의 인스턴스를 저장하고 정보를 출력
// 무늬는 diamond, heart, spade, clover 중 하나
// 숫자는 1부터 13 사이의 값 중 하나
package day_06_27;

public class Test2 {
	public static void main(String[] args) {
		Card[] arr = new Card[5]; // 0, 1, 2, 3, 4
		
		int number = 0; // 1~13 사이의 값
		int index = 0;
		String[] shape = {"diamond", "heart", "spade", "clover"}; // diamond, heart, spade, clover 중 무늬
		
		for(int i=0; i<arr.length; i++) {
			number = (int)(Math.random()*13) + 1; // 1~13 사이의 랜덤 숫자 값 
			index = (int)(Math.random()*4); // 0~4
			arr[i] = new Card(shape[index], number); // 랜덤 값이 들어있는 5개의 객체 생성
			System.out.println((i+1) + "번 | " + arr[i]);
		}
		
		
	}
}

class Card {
	String shape; // 카드 무늬
	int num; // 카드 숫자
	int height; // 카드 세로 길이
	int width; // 카드 가로 길이
	
	// 매개변수가 4개인 생성자
	Card(String shape, int num, int height, int width) {
		this.shape = shape;
		this.num = num;
		this.height = height;
		this.width = width;
	}
	
	//매개변수가 2개인 생성자
	Card(String shape, int num) {
		this.shape = shape;
		this.num = num;
		this.height = 200;
		this.width = 100;
	}
	
	@Override
	public String toString() {
		return "카드 무늬 : " + this.shape + 
				", 카드 숫자 : " + this.num + 
				", 가로 길이 : " + this.width +
				", 세로 길이 : " + this.height;
	}
}

🚩Student, StudentEx 클래스를 만들고 이름, 반, 번호, 국영수, 자바 점수를 출력하시오.

//클래스명 : Student
//멤버변수 : 데이터타입-변수명-용도
// String-name-이름
// int-ban-반
// int-no-번호
// int-kor-국어점수
// int-eng-영어점수
// int-math-수학점수

//생성자
//매개변수가 3개인 생성자 - 이름, 반, 번호를 전달받아 초기화, 모든 점수는 -1로 초기화
//매개변수가 6개인 생성자 - 이름, 반, 번호, 국영수 점수를 전달받아 멤버변수를 초기화

//메서드 : 메서드명-반환타입-기능-전달인자
//setKor-void-국어점수설정-국어점수
//setEng-void-영어점수설정-영어점수
//setMath-void-수학점수설정-수학점수
//getKor, getEng, getMath - 각각 국영수 점수를 반환, 반환타입 int, 전달인자 없음
//getTotal-int-국영수 총점을 반환, 점수가 입력되기 전이면 오류 메세지
//toString 오버라이딩 - 모든 멤버변수들을 출력
//getAverage-float-국영수 평균을 반환

-------------------------------------------------------------------------------------------------------------------

//클래스명 : StudentEx
//조상클래스명 : Student
//멤버변수 : 데이터타입-변수명-용도
// int -java - 자바 파일명

//생성자
//매개변수가 3개인 생성자 - 이름, 반, 번호를 전달받아 초기화, 모든 점수는 -1로 초기화
//매개변수가 7개인 생성자 - 이름, 반, 번호, 국영수, 자바 점수를 전달받아 멤버변수를 초기화

//메서드 : 메서드명-반환타입-기능-전달인자
//setJava - void-자바점수설정-자바점수
//getJava - int - 자바점수를 반환, 전달인자 없음
//getTotal-int-국영수와 자바 총점을 반환, 점수가 입력되기 전이면 오류 메세지
//toString 오버라이딩 - 모든 멤버변수들을 출력
//getAverage-float-국영수자바의 평균을 반환
package day_06_27;

public class Test3 {
	public static void main(String[] args) {
		StudentEx s1 = new StudentEx("스폰지밥", 1, 3);
		StudentEx s2 = new StudentEx("뚱이", 1, 4);
		StudentEx s3 = new StudentEx("징징이", 1, 5, 60, 100, 50, 60);
		
		s1.setKor(70);
		s1.setEng(90);
		s1.setMath(70);
		s1.setJava(80);
		
		s2.setKor(20);
		s2.setEng(50);
		s2.setMath(10);
		s2.setJava(100);
		
		System.out.println(s1);
		System.out.println(s2);
		System.out.println(s3);
	}

}
class StudentEx extends Student {
	int java;
	
	// 매개변수가 7개인 생성자 - 이름, 반, 번호, 국영수, 자바 점수
	StudentEx(String name, int ban, int no, int kor, int eng, int math, int java) {
		super(name, ban, no, kor, eng, math); // Student(String name, int ban, int no, int kor, int eng, int math) 생성자 호출
		this.java = java;
	}
	
	// 매개변수가 3개인 생성자 - 이름, 반, 번호
	StudentEx(String name, int ban, int no) {
		super(name, ban, no); // Student(String name, int ban, int no) 생성자 호출
	}
	
	void setJava(int java) {this.java = java;}
	int getJava() {return this.java;}
	
	int getTotal(int kor, int eng, int math, int java) {
		int sum = 0;
		
		if(this.kor < 0 || this.eng < 0 || this.math < 0 || this.java < 0) {
			System.out.println("오류");
		}
		else {
			sum = super.getTotal() + java;
		}
		return sum;
	}
	
	float getAverage() {
		float avg = 0.0f;
		avg = this.getTotal() / 4;
		return avg;
	}
	
	@Override
	public String toString() {
		return "학생 이름 : " + super.name + 
				", 반 : " + super.ban +
				", 번호 : " + super.no +
				", 국어 점수 : " + super.kor +
				", 영어 점수 : " + super.eng +
				", 수학 점수 : " + super.math +
				", 자바 점수 : " + this.java +
				", 총점 : " + this.getTotal() +
				", 평균 : " + this.getAverage();
	}
}

class Student {
	String name; // 학생 이름
	int ban; // 반
	int no; // 번호
	int kor; // 국어 점수
	int eng; // 영어 점수
	int math; // 수학 점수
	
	// 매개변수가 6개인 생성자 - 이름, 반, 번호, 국영수 점수
	Student(String name, int ban, int no, int kor, int eng, int math) {
		this.name = name;
		this.ban = ban;
		this.no = no;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	
	// 매개변수가 3개인 생성자 - 이름, 반, 번호
	Student(String name, int ban, int no) {
		this(name, ban, no, -1, -1, -1); // Student(String name, int ban, int no, int kor, int eng, int math) 생성자 호출
	}
	
	// 점수 설정
	void setKor(int kor) {this.kor = kor;}
	void setEng(int eng) {this.eng = eng;}
	void setMath(int math) {this.math = math;}
	
	// 점수 반환
	int getKor() {return this.kor;}
	int getEng() {return this.eng;}
	int getMath() {return this.math;}
	
	// 총점 반환. 점수가 입력되기 전이면 오류 메시지
	int getTotal() {
		int sum = 0;
		if(this.kor < 0 || this.eng < 0 || this.math < 0) {
			System.out.println("오류");
		}
		else {
			sum = this.kor + this.eng + this.math;
		}
		return sum;
	}
	
	// 평균 반환
	float getAverage() {
		float avg = 0.0f;
		avg = this.getTotal() / 3;
		return avg;
	}
	
	@Override
	public String toString() {
		return "학생 이름 : " + this.name + 
				", 반 : " + this.ban +
				", 번호 : " + this.no +
				", 국어 점수 : " + this.kor +
				", 영어 점수 : " + this.eng +
				", 수학 점수 : " + this.math +
				", 총점 : " + this.getTotal() +
				", 평균 : " + this.getAverage();
	}

	
}

🚩Point, Point3D 클래스를 만들고 x,y,z좌표를 출력하시오.

//클래스명 : Point
//멤버변수 : 데이터타입-변수명-용도
// int - x - x좌표
// int - y - y좌표

//생성자
// 매개변수가 2개인 생성자 - x, y 좌표를 전달받아 멤버변수에 저장

//메서드 : 메서드명-반환타입-기능-전달인자
// getLocation - String - xy 좌표값을 문자열로 반환 - 없음
//테스트 코드 : x,y좌표가 10, 20인 Point 인스턴스를 생성하고 화면에 좌표값을 출력

-------------------------------------------------------------------------------------------------------------------


//클래스명 : Point3D
//조상클래스 : Point
//멤버변수 : 데이터타입-변수명-용도
//int - z - z좌표

//생성자
// 매개변수가 3개인 생성자 - x, y, z좌표를 전달받아 멤버변수에 저장
//메서드 : 메서드명-반환타입-기능-전달인자
//getLocation - String - xyz 좌표값을 문자열로 반환
package day_06_27;

public class Test4 {
	public static void main(String[] args) {
		Point3D p = new Point3D(10, 20, 30);
		System.out.println(p.getLocation());
	}
	
}
class Point3D extends Point {
	int z;
	
	//매개변수가 3개인 생성자 - x, y, z 좌표 저장
	Point3D(int x, int y, int z) {
		super(x,y);
		this.z = z;
	}
	
	// xyz 좌표값을 문자열로 반환
	String getLocation() {
		return super.getLocation() + "z좌표 : " + z;
	}
}

class Point {
	int x;
	int y;
	
	// 매개변수가 2개인 생성자 - x, y 좌표 저장
	Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	// xy 좌표값을 문자열로 반환
	String getLocation() {
		return "x좌표 : " + x + " y좌표 : " + y;
	}
}

🚩Tv, TvIp 클래스를 만들고 전원, 채널, 음량, ipTv인지 아닌지 확인하여 출력하는 소스를 작성하시오.

//클래스명 : Tv
//멤버변수 : 데이터타입-변수명-용도
// boolean-power-전원on/off
// int-channel-채널
// int-volumn-음량

//생성자
//기본 생성자 : 채널은 0, 음량은 0
//매개변수가 2개인 생성자 : 채널과 음량을 전달받아 멤버변수를 초기화

//메서드 메서드명-반환타입-기능-전달인자
//setChannel - 없음 - 정수값을 입력받아 채널 멤버변수에 저장 - int
//getChannel - int - 멤버변수에 저장된 채널 값을 반환 - 없음
//setVolumn - 없음 - 정수값을 입력받아 음량 멤버변수에 저장 - int
//getVolumn - int - 멤버변수에 저장된 음량 값을 반환 - 없음
//powerOnOff - 없음 - 호출할 때 마다 전원 멤버변수 값을 반전 - 없음

-------------------------------------------------------------------------------------------------------------------

//클래스명 : TvIp
//조상클래스명 : Tv
//멤버변수 : 데이터타입-변수명-용도
//boolean - ipTv - IP 티비 여부를 확인

//생성자
//기본 생성자 : 채널은 0, 음량은 0, IP 티비는 true
//매개변수가 3개인 생성자 : 채널과 음량, ipTv을 전달받아 멤버변수를 초기화

//메서드 메서드명-반환타입-기능-전달인자
//isIpTV - boolean - 없음
package day_06_27;

public class Test5 {
	public static void main(String[] args) {
		TvIp t1 = new TvIp(20, 100, false); // 채널 : 20, 음량 : 100
		TvIp t2 = new TvIp();

		t1.powerOnOff();
		t2.powerOnOff();

		t2.setChannel(50);
		t2.setVolumn(80);
		System.out.println("1번째 " + t1);
		System.out.println("2번째 " + t2);
	}
}

class TvIp extends Tv {
	boolean ipTv;

	// 기본 생성자
	TvIp() {
		super(0, 0);
		this.ipTv = true;
	}

	// 매개변수가 3개인 생성자 : 채널, 음량, ipTv
	TvIp(int channel, int volumn, boolean ipTv) {
		this.channel = channel;
		this.volumn = volumn;
		this.ipTv = ipTv;
	}

	boolean isIpTv() {
		return this.ipTv;
	}

	@Override
	public String toString() {
		return super.toString() + ", ipTv 유무 : " + this.isIpTv();
	}
}

class Tv {
	boolean power;
	int channel;
	int volumn;

	Tv() {
		this(0, 0); // Tv(int channel, int volumn) 생성자 호출
	}

	Tv(int channel, int volumn) {
		this.channel = channel;
		this.volumn = volumn;
	}

	// 전원
	void powerOnOff() {
		power = !power;
	}

	// 채널
	void setChannel(int channel) {
		this.channel = channel;
	}

	int getChannel() {
		return this.channel;
	}

	// 음량
	void setVolumn(int volumn) {
		this.volumn = volumn;
	}

	int getVolumn() {
		return this.volumn;
	}

	@Override
	public String toString() {
		return "Tv 상태 : " + this.power + ", 채널 : " + this.channel + ", 음량 : " + this.volumn;
	}
}
728x90
반응형

댓글