* 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);
}
}