상세 컨텐츠

본문 제목

자바 메서드 오버로딩 설명

관리X 과거글

by 까먹기전에 2015. 9. 16. 22:39

본문

반응형
# 메서드오버로딩 : 하나의 클래스에 이름이 같은 메서드가 여러개 선언되는
경우. 단, 매개변수의 개수나 자료형으로 구분할 수 있어야한다.
[ex]
class A{
 void a(){}
 void a(int b){}
 void a(String b){}
 void a(int b, int c){}
 int a(){ return 100; } // 컴파일에러
}
---------------------------------------------------------------------------------------
class A{
 int a=100;
}
class B extends A{
 int a=200;
 void b(){
   System.out.println(super.a); // 부모의 a인트 호출
System.out.println(a);// 자기 클래스에 있는 a 호출
 }
}
class C{
 public static void main(String args[]){
  B o=new B();
  o.b();
 }
}
--------------------------------------------------------------------------------------
class A{ 
   public String toString(){ // object 클래스의 toString을 오버라이딩
return "aaa"+ super.toString();//aaa문자열과 부모(object)의 toString을 리턴
}
}
class B{
 public static void main(String args[]){
  A o=new A();
  System.out.println(o); // aaa
  String s=o.toString();
  System.out.println(s); // aaa
 }
}
-------------------------------------------------------------------------------------
class A{
String a;
A(String a){ // 생성자 생성해서 스트링 a에 입력값 저장
this.a=a;
}

 public String toString(){ // toString 오버라이딩 해서 저장된 멤버변수 리턴
return a;
}
}
class B{
 public static void main(String args[]){
  A o1=new A("aaa"); //생성자 호출
  A o2=new A("bbb");
  System.out.println(o1); // aaa
  System.out.println(o2); // bbb
 }
}
------------------------------------------------------------------------------------
 class Car{
String a;
int b;
Car(String a , int b){ // 생성자 매개변수에 맞게 선언
this.a=a;  // 매개변수값 저장
this.b=b;
}
Car(String a){  // car2 생성자
this(a,200); // car1 생성자 호출해서 매개변수 a값과 , 200을 입력
}

public String toString(){
return a+b; // 리턴떄림
}
}

class A{
 public static void main(String args[]){
  Car car1=new Car("red",100);
  Car car2=new Car("blue");
  System.out.println(car1); // 색상:red,속도:100
  System.out.println(car2); // 색상:blue,속도:200  
 }
}
----------------------------------------------------------------------------------



class Animal{
 void sound(){ // 최상위 클래스
}

class Dog extends Animal{
void sound() { // 출력은 클래스명.sound() 를 해야하기때문에 메서드 오버로딩을 해서 개소리 출력
System.out.println("ㅁ와뢍ㄹ");
}
}
class Cat extends Animal{
void sound() { // 마찬가지
System.out.println("냐냐야ㅑ냥");
}
}
class A{
 public static void main(String args[]){
  Dog dog=new Dog();
  dog.sound();
  Cat cat=new Cat();
  cat.sound();
 }
}
//멍멍과 야옹이 출력되게.
------------------------------------------------------------------------------------------------
# 다형적변수 :
다형적변수는 자식의 오버라이딩된 메서드만 호출할 수 있다.
다형적변수는 자식의 오버라이딩 되지 않은 메서드는 호출할 수 없다.

[sy] 부모 다형적변수=new 자식();

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

class A{
 void a(){ System.out.println(1); }
}
class B extends A{
 void a(){ System.out.println(2); }
 void b(){ System.out.println(3); }
}
class C{
 public static void main(String args[]){
  //A o=new A();
  B o1=new B(); // 자식을 클래스선언 하면 상속해주는 부모가 있으면 그 부모는 클래스선언을 안해줘도 알아서 잘됨 
  o.a(); // 1 
  o1.b(); // 컴파일에러 - B클래스 생성을 선언 하지 않았기 때문에
 }
}
-----------------------------------------------------------------------------------------------
class A{
 void a(){ System.out.println(1); }
}
class B extends A{
 void a(){ System.out.println(2); }
 void b(){ System.out.println(3); }
}
class C{
 public static void main(String args[]){
  A o=new B(); 
  o.a(); // 2
 // o.b(); // 컴파일에러
 }
}
------------------------------------------------------------------------------------------------
class A{ 
 public String toString(){ // object 의 클래스를 오버라이딩해서 aaa를 출력
return "aaa";
}
}
class B{
 public static void main(String args[]){
  A o=new A();
  System.out.println(o); // aaa
  String s=o.toString();
  System.out.println(s); // aaa
 }
}
---------------------------------------------------------------------------------------------------
class A{
public String toString(){
return super.toString() + "aaa"; // 오브젝트의 toString를 오버라이딩해서
}
}

class B{
 public static void main(String args[]){
  A o=new A();
  System.out.println(o); // A@주소,aaa
  String s=o.toString();
  System.out.println(s); // A@주소,aaa
 }
}
--------------------------------------------------------------------------------------------------
class A{
String a,b;
A(String a){
this.a=a; // 생성자에서 매개변수 ㅂ다아서 멤버변수에 저장
}
public String toString(){
return a; // 오버라이딩해서 a 리턴
}
}
class B{
 public static void main(String args[]){
  A o1=new A("aaa");
  A o2=new A("bbb");
  System.out.println(o1); // aaa
  System.out.println(o2); // bbb
 }
}
-------------------------------------------------------------------------------------------------
class Car(
String aa;
int bb;

Car(String a , int b){
aa=a;
bb=b;
}

Car(String aaa){
this(aaa,200);
}

public String toString()(
return "색상"+aa+"속도"+bb;
}
}

class A{
 public static void main(String args[]){
  Car car1=new Car("red",100);
  Car car2=new Car("blue");
  System.out.println(car1); // 색상:red,속도:100
  System.out.println(car2); // 색상:blue,속도:200  
 }
}
-----------------------------------------------------------------------------------------
class A{
 void a(){ System.out.println(1); }
}
class B{
 public static void main(String args[]){
  Object o=new A(); // a의 주소를 오브젝트 o 에 주소를 담음 
  A o2 = (A)o; // 오브젝트 o(A의주소) 의 오브젝트를 A로 바꿈
  o2.a; // A에 a 메서드 호출
 }
}
-----------------------------------------------------------------------------------------
class Animal{ 
 void sound(){ } 
}
class Dog extends Animal{
 void sound(){ System.out.println("멍멍"); } 
}
class Cat extends Animal{
 void sound(){ System.out.println("야옹"); } 
}
class Sound{
  void soundtest(Animal animal){ // 최상위 부모를 선언 해놓으면, 자식의 주소가 매개변수로 들어와도 에러가 나지 않는다
animal.sound(); 
}
}
class A{
 public static void main(String args[]){
  Dog dog=new Dog();
  Cat cat=new Cat();
  Sound s=new Sound();
  s.soundtest(dog);
  s.soundtest(cat);
 }
}
---------------------------------------------------------------------------------------
class Animal{}
class Dog extends Animal{
 void sound(){ System.out.println("멍멍"); } 
}
class Cat extends Animal{
 void sound(){ System.out.println("야옹"); } 
}
class A{
 public static void main(String args[]){
  Dog dog1=new Dog();
  Dog dog2=new Dog();
  Cat cat=new Cat();
  
  Animal[] array={dog1,dog2,cat};
  
  System.out.println(array[0]); //주소값 나옴
  System.out.println(dog1);//마찬가지로 주소값
  dog1.sound();   // 멍멍 
  ((Dog)array[0]).sound(); // array[0].sound(); 는  animal 타입이라서 Dog타입으로 바꿔서 출력
 }
}
 
-----------------------------------------------------------------------------------------


'관리X 과거글' 카테고리의 다른 글

자바 this() 와 super()에 대해  (0) 2015.09.16
자바 오버로딩과 오버라이딩 설명  (0) 2015.09.16
자바는 독립적 플랫폼이다.  (0) 2015.09.16
scalability , portability  (0) 2015.08.28
현재까지 개발설계  (0) 2015.08.27

관련글 더보기