정보처리기사/[흥달쌤] 실기_JAVA 특강 (완)

JAVA특강 / 03. 상속

web_seul 2022. 4. 29. 12:55
반응형

1. 상속의 개념 : 부모로부터 물려받은 속성이나 행동

2. 객체 정의

class Parent{
  String name;	//두개의 멤버변수
  int age;
  public void set_name(String param_n){	//두개의 메서드
    name=param_n;
  }
  public void set_age(int param_i){
    age=param_i;
  }
}
class Child extends Parent{	//private제외하고 모두 상속
  int height;	//하나의 멤버변수
  public void set_height(int param_h){	//하나의 메서드
    height=param_h;	
  }
}

3. 객체 생성

public static void main(String[] args){
  Child c = new Child();
  c.set_name("홍길동");
  c.set_age(40);
  c.set_height(170);
  
  System.out.print(c.name);	//홍길동(상속)
  System.out.print(c.age);	//40(상속)
  System.out.print(c.height);	//170
}

*print/printIn 구분하기

4. 멤버변수&유효범위

class Parent{
  String name;	//두개의 멤버변수
  int age;
  public void set_name(String param_n){	//두개의 메서드
    name=param_n;
  }
  public void set_age(int param_i){
    age=param_i;
  }
}
class Child extends Parent{	//private제외하고 모두 상속
  String name;	//부모와 동일한 멤버변수가 선언되어
  int age;	//자식에서 멤버변수가 재생성
  int height;
  public void set_height(int param_h){	//하나의 메서드
    height=param_h;	
  }
}

public static void main(String[] args){
  Child c = new Child();
  c.set_name("홍길동");	//set_neme 메서드는 부모에만 존재
  c.set_age(40);	//set_age 메서드는 부모에만 존재
  c.set_height(170);
  
  System.out.print(c.name);	//null
  System.out.print(c.age);	//null
  System.out.print(c.height);	//170
}

5. this(나) & super(부모)

class Parent{
  String name;
  int age;
  public void set_name(String param_n){
    name=param_n;
  }
  public void set_age(int param_i){
    age=param_i;
  }
}

class Child extends Parent{
  String name;	//세개의 멤벼변수
  int age;
  int height;
  public void set_name(int param_n){	//메서드 오버라이딩
    super.name=param_n + "엄마";	//부모super의 name은 인자로 받은 param_n + 엄마
    this.name=param_n;	//자식의 name은 인자로 받은 param_n
  }
  public void set_age(int param_i){	//메서드 오버라이딩
    super.set_age(param_i + 24);	//부모super의 age는 인자로 받은 param_i + 24
    age=param_i;	//자신의 age는 인자로 받은 param_i
  }
}


public static void main(String[] args){
  Child c = new Child();
  c.set_name("길동이");	//자식의 set_name
  c.set_age(40);	//자식의 set_age
  
  System.out.print(c.name);	//(길동이엄마), 길동이
  System.out.print(c.age);	//(64), 40
}

 

다음 Java프로그램의 실행결과로 옳은 것은?

class A{
  A(){System.out.printf("%d",10);} //인자가없는 생성자 A 10
}
class B extends A{	//A상속
  B(int a){System.out.printf("%d",a);}	//100 -> 자식C로부터 받음
}
class C extends B{	//B상속
  C(int a){
  	super(a/10);	//부모(B)의 a/10을 받음 = 100 -> 부모B로 끌어올려짐
    System.out.printf("%d",a);	//1000
  }
}
//생성자 순서 : A -> B -> C
//출력순서 "

class Test{
  public static void main(String[] args){
    A b = new C(1000);
  }
}
//10 100 1000

 

다음 Java프로그램의 실행결과는?

Interface A{	//추상 인터페이스(실존x, 객체생성x)
  int a = 2;
}
class B implements A{	//상속이 없으니 구현해라
  int b;
  B(int i){b=i*a;} //b=1*2=2
  int getb(){return b;}
}

public class Test{
  public static void main(String[] args){
    int a=3;	//a=3;
    B b1=new B(1);	//classB의 i에 1대입, B에서 class A로 부터 받은 a=2대입, b=1*2=2
    System.out.printIn(b1.getb());	//2
  }
}

* calss + extends

* interface + implements

 

반응형