'super키워드'에 해당되는 글 1건

  1. 2012.07.28 this, super키워드

* super
1. 부모의 생성자 호출 시 사용(중요함, )
-생성자는 class와 이름이 같아야 하므로 부모class의 생성자는 상속이 안된다.
단, 자식 class의 생성자에서 부모의 생성자 호출은 가능.
- super([argument, ...]);
->생성자 구현부의 첫 명령어로 와야한다. (this도 생성자 구현부의 첫 명령어로 와야함으로 this와 super는 함께 쓸수 없다. )
->생성자 구현부에 this()나 super() 코드가 없으면 super();<-부모의 no-argument 생성자 호출 하는 코드가 자동으로 들어간다.
2. 부모의 객체를 참조하는 변수(중요도가 약간 떨어짐)

* this
1. overloading 된 생성자 호출(몰라도 프로그램 짜는데 이상이 없음, 프로그램 코딩을 다해주면됨. 코드 라인을 줄여주는 역할)
->생성자 구현부의 첫 명령어로 와야한다.
2.현재 일하는 메소드의 객체 - local

* 메소드 overriding(메소드 재정의) :  하위 class에서 부모 class에 정의된 메소드의 구현을 재정의 하는것. (자기만의 특징을 넣어서 다시 구현하고 싶을 때 메소드를 다시 정의하는 것.)
- 규칙 : 부모 안에 있는 메소드를 자식에서 똑같이 만들어서 내용만 바꾸는 것이다.
             전제 :  상속관계
      1. 이름, return type, 매개변수가 같아야 한다.
      2. 접근 제한자의 범위가 부모와 같거나 더 넓어야 한다. (만약 접근제한자의 범위가 부모가 protected면 자식은 protected나 public 이어야 한다.만약 접근제한자의 범위가 부모가 public이면 자식은 public이어야한다.단, 부모가 private면 상속해서 받아 올 수 없기때문에 오버라이딩이 아니다.)
* 메소드 overloading - 다른 메소드인데 인자와 타입이 다르면 한 클레스 내에서 사용 가능한 것.

*exception 관련 규칙.


* 2012-3-14

- 상속 :
부모클래스 :  자식클래스의 공통적인 내용을 추려서 새로 만들어진 클래스
(추상적이다.)

* super - 생성자호출 -> 부모의 생성자를 부름
             - 객체의 참조변수
      - 생성자 구현 첫 명령에 와야 한다.
      - 하위 class의 객체에서 부모 class의 객체를 참조하는 참조변수.
      - overriding한 메소드에서 부모에 정의된 원본메소드 호출시 사용.
      사용 : super.부모의 member-변수나, 메소드

          public
넓다       |
          protected
              |
좁다   private

*
Project : day16
package : overriding.test
class : Superclass
    SubClass

package overriding.test;

public class SuperClass {
 

 public void methodA(int i){
  System.out.println("SuperClass.methodA() : "+i);
 }
}


----------------------


package overriding.test;

public class SubClass extends SuperClass {
 /*
 //overriding - return type이 틀림
 public int methodA(int i){
  System.out.println("SubClass.methodA(int) : "+i);
 }
 //overriding = 접근제한자가 부모보다 좁아서 틀림.
 protected void methodA(int i){
  System.out.println("SubClass.methodA(int) :"+i);
 }
 */
 //overriding = 정상
 public void methodA(int i){
  System.out.println("SubClass.methodA(int) :"+i);
 }
 
 //overloading
 public void methodA(){
  System.out.println("SubClass.methodA()");
 }
 //overloading
 public void methodA(String str){
  System.out.println("SubClass.methodA(String) : "+str);
 }
 public static void main(String[] args) {
  SubClass sc  = new SubClass();
  sc.methodA(10);
 }
}


------------------------------

* 도형 예제

package : overriding.figure
TestShape - main()
Rectangle -width, height
Circle - radius, PI
Triangle - width, height

Shape - public void calculate Area(){}


ex :

package overriding.test;

import overriding.figure.Circle;
import overriding.figure.Rectangle;
import overriding.figure.Triangle;

public class TestShape {

 public static void main(String[] args) {
  Circle c = new Circle(3);
  c.calculateArea();
  
  Rectangle r = new Rectangle(10,20);
  r.calculateArea();
  
  Triangle t = new Triangle(10,20);
   t.calculateArea();

 }

}

----------------------

package overriding.figure;

public class Shape {
 public void calculateArea(){}
}

-----------------------

package overriding.figure;

public class Rectangle extends Shape{
 private double width;
 private double height;
 
 public Rectangle(double width, double height) {
  this.width = width;
  this.height = height;
 }

 public void calculateArea(){
  System.out.println(" 사각형의 넓이는 : "+width*height);
 }

 
}

-------------------------

package overriding.figure;

public class Circle extends Shape{
 private double radius;
 
 public Circle(double radius) {
  this.radius = radius;
 }

 public void calculateArea(){
  
  System.out.println(" 원의 넓이는 : "+radius*radius*Math.PI);
 }
 
}


------------------------------

package overriding.figure;

public class Triangle extends Shape{
 private double width;
 private double height;
 public Triangle(double width,double height){
  this.width = width;
  this.height = height;
 }
 public void calculateArea(){
  
  System.out.println(" 삼각형의 넓이는 : "+width*height/2);
 }

 
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

의존관계(dependency)  (0) 2012.07.28
final변수  (0) 2012.07.28
상속, 생성자  (0) 2012.07.28
싱글턴 패턴  (0) 2012.07.28
static 예  (0) 2012.07.28
Posted by 조은성
,