1. 상속(**)

 

- 기본클래스(부모클래스,super클래스)의 속성과 메소드를 물려받고 기존의 기능을 수정하거나 새로운 기능을 추가(확장)하는 것

- 형식

class 부모클래스{
      ...
}
class 자식클래스 extends 부모클래스{
      ..
}

 

- 부모의 private멤버는 자식클래스에서 직접 접근할수 없다.

- 부모의 protected멤버는 외부(다른패키지)에서는 접근할 수 없고 자식클래스에서는 접근할 수 있다.

 

 

ex> 부모 : 이름, 주민번호 private 선언. 자식에서 바로 사용못함.

       메소드를 이용하여 변수에 값 set.

//부모클래스(super클래스)
class Person  
{
    //이름
    private String name;

    //주민번호
    private String snum;

    public void setPer(String name,String snum)
    {
        this.name=name;
        this.snum=snum;
    }
    public void printPer()
    {
        System.out.println("이름:"+name+",주민번호:"+snum);
    }
}
//자식클래스

class Student extends Person    
{
    //학번
    private int stuNum;

    public void setStu(String name,String snum,int stuNum){
        setPer(name,snum);
        this.stuNum=stuNum;
    }
    public void printStu(){
        printPer();
        System.out.println("학번:"+stuNum);
    }
}

class Test03_inheritance{
    public static void main(String[] args){
        Student stu=new Student();
        stu.setStu("홍길동","123456-1234567",987654);
        stu.printStu();
    }
}

 

 

 

 


- protected 멤버는 자식클래스에서 접근이 가능하다.

 

ex> 부모 : 이름과 주민번호는 protected 로 선언. 자식에서 사용가능.

//부모클래스(super클래스)

class Person          
{
    //이름
    protected String name;
    //주민번호
    protected String snum;

    public void setPer(String name,String snum)
    {
        this.name=name;
        this.snum=snum;
    }
    public void printPer()
    {
        System.out.println("이름:"+name+",주민번호:"+snum);
    }
}

 

//자식클래스

class Student extends Person
{
    //학번
    private int stuNum;

    public void setStu(String name,String snum,int stuNum)
    {
        this.name=name;
        this.snum=snum;
        this.stuNum=stuNum;
    }
    public void printStu(){
        System.out.println("이름:"+name);
        System.out.println("주민번호:"+snum);
        System.out.println("학번:"+stuNum);
    }
}

class Test04_inheritance
{
    public static void main(String[] args)
    {
        Student stu=new Student();
        stu.setStu("홍길동","123456-1234567",987654);
        stu.printStu();
    }
}

 

 

 

ex> 사각형, 삼각형 넓이 구하기.

class MyShape
{
    private double x,y;

    public void setXY(double x,double y)
    {
        this.x=x;this.y=y;
    }
    public double getX(){return x;}
    public double getY(){return y;}
}
class MyRect extends MyShape
{
    public double getArea()
    {
        double area=getX()*getY();
        return area;
    }
}
class MyTriangle extends MyShape
{
    public double getArea()
    {
        return getX()*getY()/2;
    }
}
class Test05_inheritance
{
    public static void main(String[] args)
    {
        MyRect mr=new MyRect();
        mr.setXY(10.0,20.0);
        System.out.println("사각형넓이:"+mr.getArea());

        MyTriangle mt=new MyTriangle();
        mt.setXY(10.0,20.0);
        System.out.println("삼각형넓이:"+mt.getArea());
    }
}

 

 

 

 

- 상속에서의 생성자

 

- 자식 객체가 생성될 때 부모 생성자가 호출되고 자신의 생성자가 호출된다!

 

ex>

class MyParent
{
    private int a;
    public MyParent(){

        System.out.println("나는 부모생성자");
    }
    public MyParent(int a){
        this.a=a;
    }
    public void printA(){
        System.out.println("a:"+a);
    }
}
class MyChild extends MyParent
{
    private int b;

    public MyChild(){
        //super();
        System.out.println("나는 자식생성자");
    }
    public MyChild(int a,int b){
        //부모생성자 호출!!!
        //위치는 가장 첫라인에 와야 함!
        super(a);
        this.b=b;
    }
    public void printB(){
        System.out.println("b:"+b);
    }
}
class  Test06_inheritance{
    public static void main(String[] args)
    {
        MyChild mc=new MyChild(1,2);
        mc.printA();
        mc.printB();

    }
}

 

 

 

 

 

'JAVA' 카테고리의 다른 글

클래스간 형변환 / 다형성  (0) 2014.09.12
오버라이딩 / final의 용도  (0) 2014.09.12
this  (0) 2014.09.12
객체배열  (0) 2014.09.12
static  (0) 2014.09.12

+ Recent posts