파라미터의 데이터형이 서로 다르기 때문에 오버로드 성립
public void user(int a){...}
public void user(long a){...}
파라미터의 개수가 서로 다르기 때문에 오버로드 성립
public void user(int a){...}
public void user(int a, int b){...}
테이터형의 전달 순서가 서로 다르기 때문에 오버로드 성립
public void user(int a, String b){...}
public void user(String b, int a){...}
오버로드 성립 불가
public void user(int a, String b){...}
public void user(int b, String a){...}
public class Member { private String job; private int age; // 파라미터가 없는 경우 public Member() { } // 파라미터 1개(age) public Member(int age) { this.age = age; } // 파라미터 1개(job) public Member(String job) { this.job = job; } // 파라미터 2개(job, age) public Member(String job, int age) { this.job = job; this.age = age; } @Override public String toString() { return "Member [job=" + job + ", age=" + age + "]"; } }
public class Main03 { public static void main(String[] args) { // 파라미터 없음 Member m1 = new Member(); System.out.println(m1.toString()); // 파라미터 숫자 입력 Member m2 = new Member(19); System.out.println(m2.toString()); // 파라미터 문자 입력 Member m3 = new Member("학생"); System.out.println(m3.toString()); // 파라미터 문자, 숫자 입력 Member m4 = new Member("개발자", 20); System.out.println(m4.toString()); } }
Member [job=null, age=0] Member [job=null, age=19] Member [job=학생, age=0] Member [job=개발자, age=20]
키워드의 용법
-> 메소드처럼 사용할 경우, 현재 클래스의 다른 생성자를 의미한다.
this 키워드를 사용하여 생성자 Overload를 간결하게 처리한다.
-> 파라미터가 서로 다른 생성자들이 하나의 완전한 생성자를 호출하도록하여, 데이터의 초기화를 한 곳에서 일괄적으로 처리하도록 구현할 수 있다.
public class Article { private int seq; private String subject; private String writer; public Article(int seq, String subject, String writer) { super(); this.seq = seq; this.subject = subject; this.writer = writer; } public Article(int seq) { // this.seq = seq; // this.subject = "제목없음"; // this.writer = "익명"; this(seq, "제목없음", "익명"); } public Article(int seq, String subject) { // this.seq = seq; // this.subject = subject; // this.writer = "익명"; this(seq, subject, "익명"); } @Override public String toString() { return "Article [seq=" + seq + ", subject=" + subject + ", writer=" + writer + "]"; }
public class Main04 { public static void main(String[] args) { // 파라미터 숫자만 입력 Article a1 = new Article(1); System.out.println(a1.toString()); // 파라미터 숫자, 문자 하나씩 입력 Article a2 = new Article(2, "테스트 게시물"); System.out.println(a2.toString()); // 파라미터 숫자, 문자, 문자 입력 Article a3 = new Article(3, "세번쨰 게시물", "자바학생"); System.out.println(a3.toString()); } }
Article [seq=1, subject=제목없음, writer=익명] Article [seq=2, subject=테스트 게시물, writer=익명] Article [seq=3, subject=세번쨰 게시물, writer=자바학생]
class Hello{ public void say() { System.out.println("Hello"); } } // 자식클래스 class Korean extends Hello { public void say() { // korean 클래스에 의해 say()메소드가 Override된 경우 System.out.println("안녕하세요"); } }
class Hello{ public void say() { System.out.println("Hello"); } } // 자식클래스 class Korean extends Hello { public void say() { // korean 클래스에 의해 say()메소드가 Override된 경우 System.out.println("안녕하세요"); } public void sayHello() { super.say(); // 부모클래스(Hello)의 say() this.say(); // 나 자신(korean)의 say() } }
public class Main01 { public static void main(String[] args) { Korean kor = new Korean(); kor.sayHello(); System.out.println("---------------------------"); kor.say(); } }
Hello 안녕하세요 --------------------------- 안녕하세요
Parent parent = new Child( );