자바 7강 - 객체 배열, 러시안 루울렛, 상속, 서브 클래스

2018. 11. 27. 22:45IT/JAVA

7강

s.equals("안“);

“안”.equals(s);

 

Date0

 

new Date().getTime(); // 이것 자체가 객체이다.

 

String s = new String(); // 객체이다.

 

중간고사

1번문제 : 생성자를 이해하는가 문제

1. 클래스이름과 같다

2. 반환형을 가지지 않는다.

class Welcome

{

String s=null;

 

public Welcome(String s)

{

this.s = s;

}

 

public void print()

{

System.out.println(s);

}

}

 

2번문제 : 객체지향프로그래밍의 맛을 보여준 문제

import java.util.*;

class Coin

{

private String face;

 

public String flip()

{

Random rand = new Random();

if(rand.nextInt(2) == 0)

{

face = "앞면";

}

else

{

face = "뒷면";

}

 

retrun face;

}

}

 

 

public class CoinFlip

{

public static void main(String args[])

{

Coin c = new Coin();

System.out.println(c.flip());

}

}

 

* 공부를 왜 못하는가? 그것은 자신이 없어서 이다. 자신이 없다 이것은 커다란 장애이다. 자신감이 없어 문제를 제대로 읽지 않는 것이 공부를 못하는 것이다. 예를 들어 교수님이 질문을 했을 때 질문을 생각하고 표현을 해라. 대답을 했을 때 맞는것과 틀린 것 둘중에 하나 나타날 것이다. 맞췄으면 자신감이 더 생길것이고 틀리면 그 문제가 더 각인되어 더 오래 기록될 것이다.

느낌으로 문제를 풀지마라. 예를 들면 A는 B다 그러면 B다.

표면적으로 느껴지는것만으로 판단하지 말고, 그것을 보고 생각을 하라.

 

 

private는 맴버변수

원칙이다.

public는 맴버메소드

 

private는 맴버변수로 하고 맴버메소드로 통하여 맴버변수를 컨트롤하는 것이 클래스의 원칙임.

 

* 배우는데 있어서는 모르는게 있으면 주저하지말고 물어봐라. 아는척하면서 앉아있으면 아무것도 얻지 못한다.

 

‘this.변수’는 객체의 맴버변수를 가리킨다.

 

객체의 배열을 만들때는 2단계를 거친다.

1. 객체의 배열을 만들고 ( Dog[] dog = new Dog[3]; )

2. Dog객체를 쓸 수 있는 이름만 만든것이므로 객체는 없다. 그러므로 객체를 만들어야 한다.

dog[0] = new Dog("쫑쫑이“,”불독“);

dog[1] = new Dog(“워리”,“똥개”);

dog[2] = new Dog("개똥이“,”진도개“);

 

메소드를 다시 생각한다.

- 메소드는 C언어의 함수와 유사한 것으로 인수와 반환값을 가지고 있다.

- 메소드는 클래스 내에서 정의되어야 한다.

- 정의된 메소드는 다른 메소드에서 호출하여 사용할 수 있다.

 

새가 먹이들을 먹고 내장에서 음식을 처리한다음 새가 앉았던 자리에 알을 낳는다.

 

static을 사용하면 컴파일시 미리 생성된다.

static에서 클래스에서 사용을 할려면 static이여야 한다.

main이 static이기 때문에....

 

러시안 루울렛

권총을 만들어라. => Revolver

맴버변수는?

메소드는?

메인클래스 이름은 RussianRoulette

import java.util.*;

import java.io.*;

 

class Revolver

{

private int [] a = new int[6];

 

public void mixing()

{

Random rand = new Random();

a[rand.nextInt(6)]=1;

}

 

public int shooting(int i)

{

return a[i];

}

}

 

class RussianRoulette

{

public static void main(String args[])

{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Revolver r = new Revolver();

r.mixing();

 

for(int i=0;i<6;i++)

{

if(i%2 == 0)

{

System.out.println(i+1+"번째 사격입니다. 컴퓨터가 쏩니다.");

try

{

Thread.sleep(2000);

}

catch (Exception e)

{}

if(r.shooting(i)==0)

{

System.out.println("아~~이런 컴퓨터가 안죽었네요~~"+"\n");

}

else

{

System.out.println("탕! 축하합니다. 컴퓨터가 죽었습니다.");

System.exit(0);

}

}

else

{

System.out.print(i+1+"번째 사격입니다. 쏘세요 [Enter]");

try

{

br.readLine();

}

catch (IOException e)

{}

try

{

Thread.sleep(2000);

}

catch (Exception e)

{}

 

if(r.shooting(i)==0)

{

System.out.println("짤깍! 다행입니다. 아직 살았습니다."+"\n");

}

else

{

System.out.println("탕! 명복을 빕니다.");

System.exit(0);

}

}

}

}

}

 

실제동작

구현

총알넣고 한번 돌린다

탄창배열의 임의의 위치에 총알있음 표시

발산한다

(총알 나감 or 안나감)

발살될 위치에 총알이 있으면 true, 없으면 false를 반환. 발사위치의 증가도 필요.

 

다른 교대방법

boolean turn = true;

 

for(int i=0;;)

{

if(turn)

{

내가하는내용;

!turn;

}

else

{

Computer;

!turn;

}

}

 

교수님 프로그램

import java.util.*;

 

class Revolver

{

private boolean magazine[] = new boolean[6];

private int current=-1;

 

public Revolver()

{

for(int i=0;i<6;i++)

{

magazine[i] = false;

}

Random r = new Random();

magazine[r.nextInt(6)]=true;

}

 

public boolean fire()

{

current++;

return magazine[current];

}

}

 

class RussianRoulette

{

public static void main(String args[])

{

Revolver gun = new Revolver();

boolean life=true;

 

for(int i=0;i<6 && life;i++)

{

 

if(gun.fire())

{

System.out.println("너 죽었어");

life = false;

}

else

{

System.out.println("살았군");

}

 

}

}

}

 

상속의 개요

상속이란 소프트웨어 개발자로 하여금 원래 가지고 있는 클래스로부터 새로운 클래스를 만들 수 있도록 해주는 것

==> 클래스를 이용하여 더 확장된 클래스를 만들어진 것.(청출어람)

 

원래 존재하는 클래스는 부모클래스/슈퍼클래스(parent class/ superclas) 또는 상위클래스라고 부른다.

 

상속으로 만들어진 클래스는 자식 클래스(child class) 또는 서브클래스(subclass)라고 부른다.

==> 서브클래스는 상속된 클래스만을 서브클래스를 말한다.

 

서브클래스는 슈퍼클래스 보다 더 구체적인 클래스가 된다. ==> 내용이 더 풍부해진다.

 

부모클래스 + 추가된내용(맴버변수나 메소드) = 자식클래스

[접근 제어자] class 클래스 이름 extends 상위 클래스

{

멤버 변수; // 추가된 맴버변수

생성자;

멤버 메서드; // 추가된 메소드

}

 

class A

{

int i;

private int j; // private는 상속이 안된다.

 

void setij(int x, int y)

{

I=x;

j=y;

}

}

 

class B extends A

{

int total;

void sum()

{

totail=i+j;

}

}

 

class A

{

int x;

}

 

class B extends A

{

String x;

}

 

class Inheritance2

{

public static void main(String[] args)

{

B b = new B();

b.x = "하하"; // a.x인지 b.x인지는 고르기 곤란한데 자바컴파일러는 b.x를 선택한다.(int형을 -> String형으로 바꿨다 : Override)

System.out.println(b.x);

 

A a = new A();

b.x = 5000;

System.out.println(a.x);

}

}