4/5일 목
수퍼클래스 = 부모클래스 = 상위클래스 = 기본클래스
서브클래스 = 자식클레스 = 하위클래스 = 파생클래스
클레스 상속 캡슐화 다형성 개념
(1) AvgTest.java
class Avg {
String name;
name는 문자열의 첫 번째 문자의 주소를 기억하고 있을 참조변수(c에서는 포인터, java에서는 String 클래스에 만들어져 있음) 4바이트
int avg;
4바이트 Avg(){} ⇒ 생략되어 있는 생성자(초기화 메소드) 클래스명과 동일한 이름 사용함
public String average(int kor, int eng) {
메소드(반환형으 String ⇒ 문자열의 첫 번째 문자의 주소가 반환됨) 매개변수로 kor과 eng
avg = (kor+eng)/2;
정수형(왼쪽) = 정수형(오른쪽)
return name+avg;
+의 의미는 문자열 연결(문자열+정수 ⇒ 문자열+문자열)
}
}
public class AvgTest {
public static void main(String[] args) {
Static : 객체를 생성하지 않아도 사용할 수 있게 하기 위해서(항상 main()메소드에서 실행이 시작됨) 메모리상에 먼저 올려놓음 (String[] args) ⇒ (String args[]) ⇒ C에서는 (int argc, char* argv[])와 같은 것
C프로그램 실행:….>Cpro.exe 123 456
⇒ argv[0]에는 “cpro.exe”에서 'c'의 주소가 들어감 ⇒ argv[1]에는 “cpro.exe”에서 '123'의 '1'의 주소가 들어감 ⇒ argv[2]에는 “cpro.exe”에서 '456'의 '4'의 주소가 들어감
자바 프로그램 실행
⇒java AvgTest 123 456 ⇒ argv[0]에는 “123”에서 '1'의 주소가 들어감 ⇒ argv[1]에는 “456”에서 '4'의 주소가 들어감
Avg student1 = new Avg();
Avg student1; 와 student1 = new Avg(); 두 줄 합친 것
Avg student2 = new Avg();
Avg student2; 와 student2 = new Avg(); 두 줄 합친 것
(1) Avg student2; 는 Avg 클래스의 주소가 기억될 참조변수 student2를 선언함
(2) Avg()는 생성자(객체를 초기화하는 메소드) 호출
(3) new Avg() ⇒ Avg 클래스의 객체를 생성하면서 Avg를 통해서 초기화함(메모리에 잡힘)
(4) student2 = new Avg(); ⇒ 메모리에 잡힌 객체의 주소를 student2에 할당(배정, 대입)함
c++에서는 new를 사용하면 반드시 delete(동적할댕했던 힙 영역의 메모리 해제)를 같이 사용해야 함(c에서는 malloc()/calloc()~free())
student1.name = "김철수"; student2.name = "김영희"; String st1_avg = student1.average(70,80);
String st1_avg;
st1_avg = student1.average(70,80);
위 두라인을 합친 것
String st2_avg = student2.average(80,90); System.out.println(st1_avg); System.out.println(st2_avg); }
}
Q
컴파일 후 생성되는 파일명 두 개 작성?
클래스명과 메소드명에 대한 관례상 작성 방법?
출력결과?
(2-참고) 아래 프로그램 작성
⇒ 안방과 거실에서 TV를 켬
⇒ 안방에서는 9번, 거실에서는 6번 시청 중
⇒ 안방에서는 11번으로 채널 바꿈
⇒ 거실에서는 5번으로 채널 바꿈
⇒ 거실에서 TV를 시청하던 여러분은 공부하기 위해서
TV를 끄고 방으로 들어감
TvTest.java
class Tv {
String color; boolean power; int channel;
void power() { power= !power; } void channelUp { ||channel; } void channelDown() { --channel;}
}
class TvTest {
public static void main(String args[]) {
각자작성
안방tv는 켜진 상태, 거실tv는 꺼진 상태임을 확인하는 코드 작성
} }
⇒ 출력결과
(4) AvgTest1.java
class Avg1 {
String name; int avg; public String average(int kor, int eng) { avg = (kor+eng)/2; return name+avg; }
}
class Avg1Total extends Avg1 {
Avg1Total 클래스에 Avg1 클래스의 속성 및 기능, 즉 변수 및 메소드를 상속함
java에서는 다중상속을 허용(c++)하지 않음
ex) 하위클래스 extends 상위클래스, 상위클래스(X) 하위 클래스 extends 상위클래스 (O)
public int total(int kor, int eng) { int score = kor + eng; return score; }
}
Avg1Total의 객체가 생성되었을 경우 사용 가능한 것
⇒ name, avg (상위클래스의 변수들)
⇒ Average(int kor, int eng) (상위클래스의 메소드)
⇒ total(int kor, int eng)
public class AvgTest1 {
public static void main(String[] args) { Avg1Total student1 = new Avg1Total(); Avg1Total student2 = new Avg1Total(); student1.name = "김철수"; student2.name = "김영희"; String st1_avg = student1.average(70,80); String st2_avg = student2.average(80,90); int st1_total = student1.total(70,80); int st2_total = student2.total(80,90); System.out.println(st1_avg+" 총점=" + st1_total); System.out.println(st2_avg+" 총점=" + st2_total); }
}
(4) AvgTest2.java
class Avg2 {
public String name; private int avg;
정보 은폐(외부 노출 안 되게 함)
public String average(int kor, int eng) { avg = (kor+eng)/2; return name+avg; }
}
public class AvgTest2 {
public static void main(String[] args) { Avg2 student1 = new Avg2(); student1.name = "김철수"; student1.avg = 100; }
}
에러 ⇒ 복사/붙여넣기
애러 나오는 이유 작성
에러 나오지 않도록 수정한 후 출력 결과 나올 수 있도록 프로그램 수정(이름 평균 출력)
접근 제어
접근 상세자에게 허용된 접근 단계
상세자 | 클레스 | 서브클래스 | 패키지 | 그외 | |||||
---|---|---|---|---|---|---|---|---|---|
⇒같은 패치지내에서 클래스와 서브 클래스의 동작 의미파악
⇒다른 패키지에서 클래스와 서브 클래스의 동작
다른 클래스 클래스 서브클래스
주소 : moham@paran.com
제목 : 객체-본인이름-0405
내용 : 위의 내용 붙여넣기
과제 : 오늘 자정(24시) 이후 블로그에서 확인(A4 자필)
다음 주.. 캡슐화부터 다시 설명(정보 은폐 포함)