ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA]java 상속의 개념/상속과 접근 제어/super/묵시적 형 변환
    Languages/Java 2021. 2. 23. 16:10
    반응형

     상속

     

    # 상속의 개념

     - 상속(inheritance)은 기존의 존재하는 클래스로부터 코드와 데이터를 이어받고 자신이 필요한 기능을

    추가하는 기법이다

     

     

    # 상속하는 클래스/상속받는 클래스 

     - 상속하는 클래스 parent,base,super class 상위클래스
     - 상속받는 클래스 child,derived,sub class 하위클래스

     

     

    # 클래스 상속 문법


      class B extends A {
       }

     
       ex) 포유류 >>> 사람

      class Human extends Mammal{
     }

     

     

     ▶ 이때!!! 

     → 코드를 재사용하는 법은 상속과 합성이 있다.

       ex) point 와 circle 클래스가 있다고 하자.

     

    point

    package inheitance;
    
    public class Point {
    
    	private int x;
    	private int y;
    	
    	public int getX() {
    		return x;
    	}
    	public void setX(int x) {
    		this.x = x;
    	}
    	public int getY() {
    		return y;
    	}
    	public void setY(int y) {
    		this.y = y;
    	}
    }
    

     

    circle

     

    package inheitance;
    
    public class Circle {
    	
    	Point point;
    	
    	private int redius;//이것은 합성관계!!! has - a관계
    
    	public Circle() {
    		Point point = new Point();
    	}
    }
    

     

     

    //이럴 때 상속관계가 형성된다.

    상속을 활용한 고객관리 프로그램

    고객의 정보를 활용하여 고객 맞춤 서비스를 구현
    고객의 등급에 따라 차별화 된 할인율고 포인트를 지급
    등급에 따른 클래스를 따로 구현하는 것이 아닌 일반적인 클래스를
    먼저 구현하고 그 보다 기능이 많은 클래스는 상속을 활용하여 구현

     

     

     

     

    # 상속과 접근제어 

     - 접근 제어자 가시성

     
    외부 클래스

    하위 클래스 동일 패키지 내부 클래스
    public
    o

    o o o
    protected
    x

    o o o
    default(선언 x)
    x

    x o o
    private
    x

    x x o

     

     

    쉬운 설명)

     

    가시성이 제일 작은것은
    private
    패키지안에서만 볼수 있는 것은
    default
    상하위 클래스만 볼 수 있는 것은
    protected
    다 볼수 있는 것은
    public

     

    super();


     상위클래스를 가리키는 키워드
    하위 클래스가 상위 클래스에대한 주고를 가지게 된다

    this 는 자기자신의 메모리를 가리키는 키워드
    생성자를 만들때 사용한다

     

    예제)

    직원클래스의 매니져클래스를 만들어 보너스를 추가 한다고 한다

     

    employee

     

    package inheitance;
    
    public class Employee {
    
    	public String name;
    	String address;
    	protected int salary;
    	private int rrn;
    	
    	public Employee(String name, String address, int salary,int rrn) {
    		this.name = name;
    		this.address = address;
    		this.salary = salary;
    		this.rrn = rrn;
    	}
    	
    	public String toString(){
    		return "Employee [name = "+ name +", address ="+ address +
    				", salary = "+ salary +",rrn= "+ rrn +"]";
    	}
    }
    

     

    manager

     

    package inheitance;
    
    public class Manager extends Employee {
    
    	private int bonus;
    	
    	public Manager(String name,String address, int salary, int rrn,int bonus) {
    		super(name,address,salary,rrn);
    		this.bonus = bonus;
    	}
    	
    	void test() {
    		System.out.println("name = " + name);
    		System.out.println("address = " + address);
    		System.out.println("salary = " + salary);
    		//System.out.println("rrn = " + rrn); 하위클래에서 상위클래스 private 생성자는 구현불가능		
    		
    	}
    }
    

     

    manaherTest

     

    package inheitance;
    
    	public class ManagerTest{
    		public static void main(String[] args) {
    		
    		Manager m = new Manager("tom","seoul",100000,123456,50000);
    		System.out.println(m);
    		m.test();
    		}		
    	}

     

    결과값

     

     

    +덧붙이는 설명)

    여기 코딩에서 보아야 할 부분은?

    어느 클래스가 상위클래스인지 하위클래스인지

    private생성자를 사용하면 다른 클래스에서 사용가능한지

    extands 생성자를 어떻게 사용하였는지

    super()생성자가 어떻게 사용되었는지 (상위클래스의 매게변수를 어떻게 이용하였는지)

     

     

     

    상위 클래스로의 묵시적 형 변환

     

    상위클래스 형으로 변수를 선언 하고 하위 클래스 인스턴스를 생성할수 있음
    하위클래스는 상위클래스의 타입을 내포하고 있으므로 상위클래스로 묵시적 형변환이 가능 함

    상속받은 클래스는 상위클래스의 타입을 내부에 내포하고 있다

    Customer vc = new VipCustomer(); //어퀘스팅

    반응형

    댓글

Designed by Tistory.