728x90
반응형
섯다 카드 한벌 생성
- 섯다카드 클래스 자체를 array로 지정하여 선언
- 지정한 후 if로 조건문을 선언하여 숫자 조건 추가
- 숫자를 배정할 때 객체를 선언하여 그 멤버변수에 숫자를 배정
- 위의 메인클래스에서 for문으로 출력
// 섯다카드 20장을 포함하는 섯다카드 한벌(sutdadeck클래스)를 정의한 것.
// 섯다카드 20장ㅇ을 담는 sutdacard배열을 초기화하시오.
// 섯다카드는 1-10까지 숫자가 적힌 카드가 한장씩 있고 1,3,8일 경우 둘증의 한장은 Kwang이어야 함
//
public class Chap7 {
public static void main(String[] args) {
SutdaDeck deck = new SutdaDeck();
for(int i = 0; i<deck.cards.length; i++) {
System.out.println(deck.cards[i]);
}
}
}
class SutdaDeck{
final int CARD_NUM = 20;
SutdaCard[] cards = new SutdaCard[CARD_NUM];
// 아래의 섯다카드 클래스 자체를 array로 지정하여 시작
SutdaDeck() {
for(int i = 0; i<CARD_NUM; i++) {
// 지정한 후 for반복문으로 if 조건문을 걸어 위의 숫자 조건 추가
if(i==2 || i == 4|| i==7) {
cards[i] = new SutdaCard(i+1, true);
}
// 클래스 자체를 array로 잡았으므로 아예 객체를 선언하여 클래스의 멤버변수에 숫자를 배정하여 출력
else {
cards[i] = new SutdaCard((i%10)+1, false);
}
}
}
}
class SutdaCard{
int num;
boolean isKwang;
SutdaCard(){
this(1,true);
}
public SutdaCard(int num, boolean isKwang) {
this.num = num;
this.isKwang = isKwang;
}
public String toString() {
return num + (isKwang ? "K" : "");
}
}
생성자 매개변수 여부에 따른 컴파일에러
조상객체를 상속받은 자손의 생성자를 생성할 때 조상의 생성자가 매개변수가 생성되어있는 상태라면 자손의 생성자도 동일하게 생성자에 매개변수를 넣은 후 super로 동일한 변수 메모리를 할당해야 한다.
package LecturePracticalExam;
class Product{
int price;
int bonusPoint;
public Product() {}
// 빈 생성자를 생성해야 아래 TV를 컴파일할때 오류가 나지않음
// TV를 호출할때 조상객체인 Product를 불러오는데 이 때 매개변수가 없는 TV는
// 매개 변수가 없는 Product가 필요함
// 다만 아래의 매개변수가 필요한 Product는 TV의 생성자도 매개변수가 있어야
// 조상 객체의 매개변수를 불러올 수 있기때문에 TV내에도 동일한 타입의 매개변수를
// 넣어줘야한다.
public Product(int price) {
this.price = price;
bonusPoint = (int)(price/10.0);
}
}
class TV extends Product{
public TV() {}
public TV(int price) {
super(price);
}
public String toString() {
return "TV";
}
}
public class Chap7_ComplileError {
public static void main(String[] args) {
TV t = new TV(100);
System.out.println(t.price);
System.out.println(t.bonusPoint);
}
}
Getter & Setter
private의 변수를 접근 가능하게 해주는 getter & setter 생성 후 전 채널로 돌아갈 수 있는 메서드 생성
package LecturePracticalExam;
public class Chap7_GetterSetter {
public static void main(String[] args) {
MyTv t = new MyTv();
t.setChannel(1);
t.setChannel(2);
System.out.println("CH:"+t.getChannel());
t.setVolume(99);
System.out.println("VOL:"+t.getVolume());
t.gotoPrevChannel();
System.out.println("CH:"+t.getChannel());
}
}
//1.
//MyTv클래스의 멤버변수 isPowerOn, channel, volume을 클래스 외부에서 접근할 수
//없도록 제어자를 붙이고 대신 이 멤버변수들의 값을 어디서나 읽고 변경할 수 있도록
//getter와 setter메서드를 추가하라.
//2.
//작성한 MyTv2클래스에 이전 채널(previous channel)로 이동하는 기능
//의 메서드를 추가해서 실행결과와 같은 결과를 얻도록 하시오.
//[Hint] 이전 채널의 값을 저장할 멤버변수를 정의하라.
//메서드명 : gotoPrevChannel
//기 능 : 현재 채널을 이전 채널로 변경한다.
//반환타입 : 없음
//매개변수 : 없음
class MyTv {
private boolean isPowerOn;
private int channel;
private int volume;
final int MAX_VOLUME = 100;
final int MIN_VOLUME = 0;
final int MAX_CHANNEL = 100;
final int MIN_CHANNEL = 1;
int PrevChannel;
public void gotoPrevChannel() {
setChannel(PrevChannel);
// 바뀌기 전의 채널 setChannel로 channel값에 배정
}
public boolean getIspowerOn() {
return isPowerOn;
}
public void setIspowerOn(boolean ispowerOn) {
this.isPowerOn = ispowerOn;
}
public int getChannel() {
return channel;
}
public void setChannel(int channel) {
if(channel<=MAX_CHANNEL && channel>=MIN_CHANNEL) {
PrevChannel = this.channel;
// 바뀌기 전의 채널을 변수에 저장
this.channel = channel;
}
else {
System.out.println("올바른 채널이 아닙니다");
return;
}
}
public int getVolume() {
return volume;
}
public void setVolume(int volume) {
if(volume<=MAX_VOLUME && volume>=MIN_VOLUME) {
this.volume = volume;
}
else {
System.out.println("올바른 볼륨이 아닙니다");
return;
}
}
}
내부 변수 선언
선언 1
package LecturePracticalExam;
public class Chap7_InnerClass {
public static void main(String[] args) {
Outer o = new Outer();
Outer.Inner i = o.new Inner();
System.out.println(i.iv);
}
}
//Outer클래스의 내부 클래스 Inner의 멤버변수 iv의 값을 출력하시오.
class Outer { // 외부 클래스
class Inner { // 내부 클래스(인스턴스 클래스)
int iv=100;
}
}
선언 2
package LecturePracticalExam;
import LecturePracticalExam.Outer2.Inner2;
public class Chap7_InnerClass2 {
public static void main(String[] args) {
Outer2.Inner2 i = new Inner2();
System.out.println(i.iv);
}
}
// static 변수이기때문에 따로 객체생성 필요없음
//Outer클래스의 내부 클래스 Inner의 멤버변수 iv의 값을 출력하시오.
class Outer2 { // 외부 클래스
static class Inner2 { // 내부 클래스(static클래스)
int iv=200;
}
}
선언 3
package LecturePracticalExam;
public class Chap7_InnerClass3 {
public static void main(String[] args) {
// 4)
Outer3 o = new Outer3();
Outer3.Inner i = o.new Inner();
i.method1();
}
}
class Outer3 {
int value=10; // Outer.this.value
class Inner {
int value=20;
void method1() {
int value=30;
System.out.println(value); //1
System.out.println(this.value); //2
System.out.println(Outer3.this.value); //3
}
}
}
//다음과 같은 실행결과를 얻도록 (1)~(4)의 코드를 완성하시오.
//30
//20
//10
익명 클래스 선언
아래의 클래스를 익명으로 선언하여 객체 선언 줄이기
package LecturePracticalExam;
import java.awt.*;
import java.awt.event.*;
//아래의 EventHandler를 익명 클래스(anonymous class)로 변경하시오.
public class AnonymousClass {
public static void main(String[] args){
Frame f = new Frame();
// f.addWindowListener(new EventHandler());
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
e.getWindow().setVisible(false);
e.getWindow().dispose();
System.exit(0);
}
});
}
}
//class EventHandler extends WindowAdapter{
// public void windowClosing(WindowEvent e) {
// e.getWindow().setVisible(false);
// e.getWindow().dispose();
// System.exit(0);
// }
// }
//}
728x90
반응형
'Java > 자바의정석 기초편' 카테고리의 다른 글
자바의 정석 8장 (21일차) - 메서드에 예외 선언 & finally (0) | 2022.02.10 |
---|---|
자바의 정석 8장 (20일차) - 프로그램 오류 (0) | 2022.02.09 |
자바의 정석 7장 (18일차) - 인터페이스 static & default (0) | 2022.02.06 |
자바의 정석 7장 (17일차) - 인터페이스를 이용한 다형성 및 장점 (0) | 2022.02.04 |
자바의 정석 7장 (16일차) - 인터페이스 (0) | 2022.02.02 |