# 메서드오버로딩 : 하나의 클래스에 이름이 같은 메서드가 여러개 선언되는
경우. 단, 매개변수의 개수나 자료형으로 구분할 수 있어야한다.
[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타입으로 바꿔서 출력
}
}
-----------------------------------------------------------------------------------------