class Tv{
boolean power;
int channel;
void power(){ // 전원
power = !power;
}
void channelUp(){ // 채널 up
++channel;
}
void channelDown(){ // 채널 down
--channel;
}
}
class SmartTv extends Tv{
boolean caption;
void displayCaption(String text){ // 자막 기능
if(caption){
System.out.println(text);
}
}
}
public class Ex7_1 {
public static void main(String[] args) {
SmartTv stv = new SmartTv();
stv.channel = 10; // 상속을 통해 Tv클래스의 channel 인스턴스 변수를 초기화함
stv.channelUp(); // 상속을 통해 부모 클래스의 메서드를 호출함
System.out.println(stv.channel);
stv.channelDown();
System.out.println(stv.channel);
stv.displayCaption("Hello, World");
stv.caption = true; //
stv.displayCaption("hello,world");
}
}
상속
class MyPoint{ // 부모 클래스 int x; int y; } class Circle2 extends MyPoint{ // 자식 클래스(상속 받음) int r; } public static void main(String[] args) { Circle2 c2 = new Circle2(); c2.x = 1; // 상속으로 인해 부모클래스 변수 초기화 c2.y = 2; c2.r = 3; System.out.println(c2.x); }
포함
class MyPoint{ // MyPoint 클래스 생성 int x; int y; } class Circle3{ MyPoint m = new MyPoint(); // MyPoint객체 생성(포함 기능) int r; } public static void main(String[] args) { Circle3 c3 = new Circle3(); // 객체 생성 c3.m.x = 1; // 객체의 객체 변수 초기화 c3.m.y = 2; c3.r = 3; }
class Tv extends Object{ // 부모가 없는 클래스라 Object클래스를 상속 받음
// (실사용때는 Object클래스를 상속받는것이 생략되어있음)
// ...
}
class SmartTv extends Tv{
// ...
}
부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수입니다.
조상 클래스로부터 상속받은 멤버도 자손 클래스 자신의 멤버이므로 super대신 this를 사용할 수 있다. 그래도 조상 클래스의 멤버와 자손클래스의 멤버가 중복 정의되어 서로 구별해야하는 경우에만 super를 사용하는 것이 좋다.
class Parent2{
protected int num = 10;
}
class Child2 extends Parent2{
private int num = 30;
void method(){
System.out.println("num :"+num); // 가장 가까이 있는 num값 출력
System.out.println("this.num :"+num); // 현재 클래스에 있는 num값 출력
System.out.println("super.num :"+super.num); // 부모 클래스에 있는 num값 출력
}
}
class Child3 extends Parent2{ // 인스턴스 변수 없는경우
void method(){
System.out.println("num :"+num); // 가장 가까이 있는 num값(부모 인스턴스 변수) 출력
System.out.println("this.num :"+num); // 현재 클래스에 값이 없으므로 부모의 값 출력
System.out.println("super.num :"+super.num); // 부모 클래스에 있는 num값 출력
}
}
public class Super {
public static void main(String[] args) {
Child2 c = new Child2();
c.method();
}
}
조상의 생성자를 호출할 때 사용
조상의 멤버는 조상의 생성자를 호출해서 초기화
생성자의 첫 줄에 반드시 생성자를 호출해야 한다.(중요!!) 그렇지 않으면 컴파일러가 생성자의 첫 줄에 super();를 삽입
class Parent2{ // 부모 클래스
protected int num; // 인스턴스 변수 선언
Parent2(int num){ // 생성자 생성
this.num = num;
}
}
class Child2 extends Parent2{ // 상속 받음
private int num2;
Child2(int num,int num2) { // 생성자 생성
super(num); // 조상의 클래스 생성자 호출(필수임)
this.num2 = num2;
}
}