-
Overloading, Constructor, Inheritance, Overriding, this, superJAVA/in 기초 2014. 2. 2. 20:57728x90
- Overloading
오버로딩이란 하나의 메소드 이름에 여러 개의 메소드를 만들 수 있게 해주는 기법이다.오버로딩의 정의- 하나의 이름으로 여러개의 메서드를 만드는 기법오버로딩 메소드를 만드는 규칙- 반드시 매개변수의 개수나 매개변수의 형이 달라야 한다.오버로딩을 사용하는 이유- 해당 클래스의 메서드를 사용할 때 사용자의 편리를 위해서- 매서드의 이름 하나로 여러 가지 작업에 대처할 수 있다.* 오버로딩은 컴파일러가 발전하면서 등장한 기술이다. 컴파일러 차원에서 메서드의 이름을 자동으로 바꾸어 주기 때문에 사용자가 펴리하게 이것을 사용하는 것이다.//원본 소스 int plus(int a, int b); float plus(float a, float b); double plus(double a, double b); //컴파일된 소스 int plus_a(int a, int b); float plus_b(float a, float b); double plus_c(double a, double b);
- Constructor
생성자란 객체의 메모리를 생성할 때 함께 호출디는 메소드이다.생성자의 정의- 객체의 생성고 동시에 자동으로 호출되는 메서드디폴트 생성자- 생성자가 없는 클래스를 위해서 컴파일러는 매개변수를 가지지 않는 디폴트 생성자를 자동으로 만들어 준다.- 생성자가 없을 경우에만 컴파일러에 의해서 생성된다.생성자의 특징- 생성자는 리턴타입이 없다.- 생성자의 이름은 클래스의 이름과 동일하다- 생성자느 객체의 메모리가 생성되 직후에 호출된다.* 생성자는 사용자가 함부로 호출할 수 있는 메서드가 아니다. 대부분 new 와 함께 사용되며 예외적으로 생성자를 호출 할 수 있는 경우는 this와 super를 이용한 경우 뿐이다.//기본 생성자 호출 TopConstructor tc = new TopConstructor(); //매개변수를 가진 생성자 호출 TopConstructor tc = new TopConstructor("lahuman");
생성자의 특징2- 디폴트 생상자를 재정의 할 수 있다.- 사용자가 다른 생성자를 정의 하였다면 시스템에서 제공하는 생성자는 사용할 수 없다.- 생성자도 오버로딩 할 수 있다.- Inheritance
상속이란 미리 만들어 둔 클래스를 다시 이용하는 방법을 말한다.상속이란?- 하위 클래스가 상위 클래스를 상속받았을 때, 하위 클래스는 상위 클래스의 모든 권한을 갖게 된다.상속과정에서 생성자의 호출- 생성자는 상속되지 않는다.- 하위 클래스의 객체를 만들 때, 상위 클래스에서 하위 클래스 순으로 생성자가 차례대로 호출된다.* 상속 과정에서 상위 클래스의 메모리가 생성되지 않느다면, 자식 레벨의 메모리는 생성되지 않는다. 이러한 이유에서 하위 객체를 만들면 상위 클래스의 생성자가 먼저 호출된다.다중상속- 자바에서는 원칙적으로 다중 상속을 허용하지 않는다.- 인터페이스(Interface)를 이용해서 변칙적으로 다중 상속을 지원하고 있다.접근 제한자- public : 모든 클래스에서 접근 가능- private : 자신의 클래스에서만 접근 가능- protected : 상속관계에서만 접근 가능- Overriding
오버라이딩이란 상위 클래스에서 있는 메서드와 똑같은 메서드를 하위 클래스에서 다시 만드는 행위를 말한다.
//상위 클래스 public class TopConstructor { private String name = ""; private String address = ""; private int age = 0; public TopConstructor() { name = "lahuman"; address = "대한민국"; age = 34; } public TopConstructor(String n, String a, int g) { System.out.println("Call TopConstructor(String n, String a, int g)"); name = n; address = a; age = g; } public String getData() { String x = name + "," + address + "," + age; System.out.println(x); return x; } } //하위 클래스 public class MiddleConstructor extends TopConstructor { public MiddleConstructor(String n, String a, int g) { super(n, a, g); System.out.println("Call MiddleConstructor(String n, String a, int g)"); } @Override public String getData() { return super.getData() + " 메롱"; } public static void main(String[] args) { TopConstructor tc = new MiddleConstructor("lahuman", "대한민국", 22); String result = tc.getData(); System.out.println(result); } }
실행 결과
Call TopConstructor(String n, String a, int g)
Call MiddleConstructor(String n, String a, int g)
lahuman,대한민국,22
lahuman,대한민국,22 메롱
* getData()의 결과가 상위 클래스의 getData가 아닌 하위 클래스의 getData가 호출된다.
상위 메서드 이름으로 하위 메서드 호출
- 하위 클래스의 메모리를 상위 클래스로 캐스팅 했을 때 그리고 메서드가 재 정의 되었을때, 상위 클래스의 객체명으로 메소드를 호출하면 재정의된 메서드가 호출된다.
- 자바의 모든 메서드에 대해서 위와 같은 사항을 제공한다.
캐스팅
- 다운캐스팅 : 상위 클래스의 메모리가 하위 클래스로 캐스팅되는 것을 말한다.
- 업캐스팅 : 하위 클래스의 메모리가 상위 클래스로 캐스팅되는 것을 말한다.
오버라이딩의 의미
- 상위 클래스에서 가지고 있던 기능을 하위 클래스에서 개선하겠다는 의미
- this
this의 개념- 자기 자신을 참조하는 가상의 참조 변수- 컴파일러가 자동으로 넣어 주는 멤버 메서드의 첫 번째 매개변수this의 기능1- 매서드의 매개변수와 클래스의 멤버 필드가 동일 하다면 구분할때 사용한다.- 필요 없다면 this 키워드는 사용하지 않아도 무방하다.this의 기능2- 클래스 내부에서 this를 사용하게 되면, 객체가 생성된 후 할당된 메모리의 참조값을 갖게 된다.- 언젠가 생성될 내 메모리의 참조값this의 기능3- this를 이용해서 생성자 내에서 다른 생성자를 호출 할 수 있다.- 생성자를 재 사용할 수 있다.- 생성자에서 다른 생성자를 호출할 때 생성자 호출은 제일 윗부분에 사용해야 한다.this를 이용해서 생성자를 호출할 때의 규칙- 반드시 생성자 내에서 다른 생성자를 호출 해야 한다.- 생성자에서 this를 이용한 생성자 호출은 어떠한 작업보다도 먼저 선행되어야 한다.- 즉 this를 이용한 생성자 호출 앞에는 어떠한 구문도 사용할 수 없다.*예제 코드public class SampleThis { private int age = 0; private String name = ""; public SampleThis() { this(10, "lahuman"); } public SampleThis(int age, String name) { this.age = age; this.name = name; } public String getData() { return this.name + "," + this.age; } public SampleThis getSampleThis(){ return this; } public static void main(String[] args){ SampleThis st = new SampleThis(); System.out.println(st.getData()); st = st.getSampleThis(); System.out.println(st.getData()); } }
- super
상위 클래스를 참조할 수 있는 가상의 참조 변수super.메소드- 자식 클래스 내에서 상위 클래스를 참조하는 가상의 참조변수- 무시당한 상위 클래스의 메서드를 사용하고자 할 때 사용한다.- 클래스 내에서마 사용 가능하다.super()- 상위 클래스의 생성자 호출* 상속 예제를 참조 하세요.
728x90'JAVA > in 기초' 카테고리의 다른 글
Formatting 기능 (0) 2014.02.21 예외처리(Exception) (0) 2014.02.21 컬랙션(Collection)과 맵(Map) 계열 (0) 2014.02.21 Polymorphism (0) 2014.02.03 Java in Memory (0) 2014.01.19