안녕하세요 #a991102 입니다.
오늘은 상속부터 import 를 설명해드리겠습니다.
부족한점은 말씀해주시면 고치겠습니다.
상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.
상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기에 코드의 추가 및 변경이 매우 용이하다.
상속은 어떻게하느냐 ?
아주간단하다 작성하고자하는 클래스 이름뒤에 상속받고자 하는 클래스 이름을 키워드
extends 와 함께 서주기만 하면된다.
class Child extends Parest{
내용
}
예를들어 보았습니다. 간단하죠 ??
그럼다음으로 ~
이두클래스는 서로 상속 관계에 있다고 하며, 상속해주는 '클래스를 조상 '클래스라고하며
상속 받는 클래스를 '자손 클래스' 라고한다.
ex)
package 삼월이십육일;
class Tv {
boolean power ; //전원상태(on/off)
int channel;
void power() { power = !power;}
void channelUp() { ++channel;}
void channelDown() {-- channel;}
}
class CaptionTv extends Tv{
boolean caption;
void displayCaption(String text) {
if(caption){
System.out.println(text);
}
}
}
class CaptionTvTest {
public static void main(String args[]) {
CaptionTv ctv = new CaptionTv();
ctv.channel = 10;
ctv.channelUp();
System.out.println(ctv.channel);
ctv.displayCaption("Hello world1");
ctv.caption = true;
ctv.displayCaption("Hello world1");
}
}
TV 클래로부터 상속받고 기능을 추가하여 CaptionTv 클래스를 작성하였다.
맴버변수 caption은 캡션 기능의 상태를 저장하기위한 boolean 형 변수이고,
displayCaption(String text) 은 매개변수로넘겨받은 문자열을 캡션이 켜져 있는경우 에만
화면에 출력한다.
1.2 클래스간의 관계 - 포함관계
ex)
class Point {
int x;
int y;
}
class Cicle{ -------> class Cicle{
int x; -------> Point c = new Point();
int y; -------> int r;
int r; -------> }
}
이런식으로 변경할수 있습니다.
1.3 클래스 간의 관계 결정하기
class Cicle {
Point c = new Point();
int r;
}
|
|
|
class Cicle extends Point {
int r;
}
두경우를 비교해 보면 cicle클래스를 작성하는데 있어서 Point클래스를 포함시키거나
상속받도록 하는 것은 결과적으로 별 차이가 없어 보인다.
그럴때는 이렇게 해보자
몇가지를 더 예르 들면, Car 클래스와 SportsCar 클래스는 SportsCar는 Car 이다
와같이 문장을 만드는것이 더 옳기 때문에 두클래스는 Car 클래스를 조상으로
하는 상속 관계를 맺어 주어야 한다.
Card 클래스와 Deck 클래스는 Deck는 Card 를 가지고 있다.
와같이 문장을 만드는 것이 더 옳기 때문에 Deck 클래스에 Card클래스를
포함시켜야한다.
1.4 단일상속
/*package 삼월이십육일;
class Tv {
boolean power ;
int channel;
void power() { power = !power;}
void channelUp() { ++channel;}
void channelDown() { --channel;}
}
class VCR{
boolean power;
int counter = 0;
void power() { power = !power}
void play() { 내용생략}
void play(){ 내용생략}
void stop(){ 내용생략}
void rew(){ 내용생략}
void ff(){ 내용생략}
}
class TVCR extends Tv {
VCR vcr = new VCR();
int counter = vcr.counter;
void play() {
vcr.play();
}
void stop(){
vcr.stop();
}
void rew() {
vcr.rew();
}
void ff() {
vcr.ff();
}
}
이런식으로 단일 상속을 하실수 있습니다.
1.5 Object 클래스 - 모든 클래스의 조상
여기는 간단하게 하고 넘어가겠습니다.~
2.1 오버라이딩
조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고한다.
상속받은 메서드를 그래도 사용하기도 하지만, 자손 클래스를 자신에 맞게
변경해야하는 경우 가 많다. 이럴 때 조상의 메서드를 오버라이딩한다.
자손클래스에서 오버라이딩하는 메서드는 조상클래스 메서드와
- 이름이 같아야한다.
- 매개변수가 같아야 한다.
- 반환타입이 같아야 한다.
오버로딩과 오버라이딩은 서로 호동하기 쉽지만 사실 그 차이는 명백하다.
오버로딩은 기존에 없는 새로운메서드를 추가하는 것이고,
오버라이딩은 조상으로부터 상속받은 메서드의 내용을 변경하는 것이다.
2.2 super
super 은 자손 클래스에서 조상 클래스로부터 상속받은 맴버를 참조하는 데 사용되는
참조변수이다.
package 삼월이십육일;
public class SuperTest {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent{
int x= 10;
}
class Child extends Parent {
void method() {
System.out.println("x :" +x);
System.out.println("this.x :" + this.x);
System.out.println("super.x:" + super.x);
}
}
//이 경우 x, this.x , super.x 모두 같은 변수를 의미하므로모두 같은 값이 출력되었다.
ps - Object클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자,this() 또는
super(), 를 호출해야한다. 그렇지 않으면 컴파일러가 자동적으로
super().;를 생성자의 첫 줄에 삽입한다.
2.3 import 선언
일반적인 소스파일 의 구성은 다음 순서로 되어있다.
package 삼월이십육일;
import java.util.Date;
import java.text.SimpleDateFormat;
public class ImportTest {
public static void main(String args[]) {
Date today = new Date();
SimpleDateFormat date = new SimpleDateFormat("yyyy/MM/dd");
SimpleDateFormat time = new SimpleDateFormat("hh:mm:ss a");
System.out.println("오늘 날짜는 "+date.format(today));
System.out.println("오늘시간은 " +time.format(today));
}
}
이상으로 길고 길었던 10번째 개발일지를 마치겠습니다
긴글인데 봐주신분들 진심으로 감사드립니다.