생성자를 다양화 해야하는 이유
객체를 생성할 때 외부의 값으로 객체를 초기화 할 필요가 있다.
외부의 값이 어떤 타입으로 몇개가 제공될 지 모르기 때문에 생성자도 다양화해질 필요가 있다.
오버로딩(Overloading)
메서드의 이름은 같고 매개변수의 유형과 개수가 다르도록 하는 것을 의미합니다.
- 리턴값만을 다르게 갖는 오버로딩은 작성 할 수 없습니다.
타입이 똑같고 개수가 똑같은 것은 생성자 오버로딩이 아니다.
오버로딩이 성립하기 위한 조건
1.메소드 이름이 같아야한다.
2.매개변수의 개수또는 타입이 달라야한다
3.반환 타입은 영향없다.
//올바른 오버로딩 예시
//반환타입영향없음
//타입다름
long add(int a, long b) {return a+b;}
long add(long a, ing b) {return a+b;}
오버라이딩(Overriding)
override의 사전적의미 v.덮어쓰다.
상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용 하는것을 의미합니다.
- 메서드의 이름은 물론 파라메터의 갯수나 타입도 동일해야 하며, 주로 상위 클래스의 동작을 상속받은 하위 클래스에서 변경하기 위해 사용됩니다.
class Point {
int x;
int y;
String getLocation(){
return "x:" + x + ",y" + y;
}
}
class Point3D extends Point{
int z;
String getLocation() {
return "x:" + x + ",y:" + y + ",z:" + z;
}
}
간략하게 요약하면
오버로딩(Overloading)은 기존에 없던 새로운 메서드를 정의하는 것이고,
오버라이딩(Overriding)은 상속 받은 메서드의 내용만 변경 하는 것입니다.
Overloading 예제1 - 파일명 : Main0.java <- package001에 있는것 불러오기
import package001.*;
public class Main0 {
public static void main(String[] arg) {
Overloading car1 = new Overloading();
//생성자 선언
System.out.println("car1.company: " + car1.company);
System.out.println();
//model은 안넣었으니 null로 뜬다
Overloading car2 = new Overloading("model_name");
System.out.println("car2.company: " + car2.company);
System.out.println("car2.model:" + car2.model);
System.out.println();
//public Overloading (String model, String color) 에 전달,
//this.model = model; //필드에 대입
Overloading car3 = new Overloading("model_name", "black");
System.out.println("car3.company: " + car3.company);
System.out.println("car3.model: " + car3.model );
System.out.println("car3.color: " + car3.color);
System.out.println();
//(String model, String color, int maxSpeed)에 전달
Overloading car4 = new Overloading("model_name", "black", 200);
System.out.println("car4.company: " + car4.company);
System.out.println("car4.model: " + car4.model );
System.out.println("car4.color: " + car4.color);
System.out.println("car4.color: " + car4.maxSpeed);
System.out.println();
}
}
Overloading 예제1 - 파일명 : Overloaing.java 위치: package001
package package001;
public class Overloading {
public String company = "hyundai";
public String model; //매개변수1
public String color; //매개변수2
public int maxSpeed; //매개변수3
//필드에선언
//필요한 값만 받아서 사용 //아래는 생성자 객체
public Overloading () {
}
//Overloading car3 = new Overloading("model_name", "black"); 전달 model 과 color에 대입
public Overloading (String model, String color) {
this.model = model;
this.color = color;
}
//매개변수를 받아서 이값을 필드값에 대입하겠다.
public Overloading (String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = 200;
//this는 위에있는 필드인 public String model;이다.
}
public Overloading(String string) {
}
}
Java Run
Overloading 예제2 - 파일명 : Main1.java <- package002에 있는것 불러오기
import package002.*;
import java.util.Scanner;
public class Main1 {
public static void main(String[] arg) {
// 계획서
// 학생의 데이터를 받고 객체를 출력해서 점수나, 코멘트를 본다
// 데이터를 받아오는 방식 : API(네트워크) / Excel 파일 읽어오기(파일 로딩) / CLI (terminal에서 데이터받아오기 , scanner)
// scanner 인스턴스생성
Scanner input = new Scanner(System.in);
System.out.println("Student Name!!");
String inputStudentName = input.nextLine();
// scanner기능
System.out.println("Subject Name!!");
String inputSubjectName = input.nextLine();
System.out.println("Grade Name!!");
int inputGradeName = input.nextInt();
input.close();
//scanner 객체를 사용했으면 닫으라는 경고가 뜰 수 있다. input.close(); 실행문으로 scanner 사용을 종료합니다.
System.out.println("student = "+inputStudentName+"// subject = "+inputSubjectName+"// grade = "+inputGradeName);
//input데이터 무결성 체크 (데이터가 잘왔는지 확인)
//인자값 통해 인스턴스 생성자 생성
// public StudentGrade(String input_name, String input_subject, int input_grade) { this.name = input_name;
StudentGrade student = new StudentGrade();
StudentGrade student_2 = new StudentGrade(inputStudentName, inputSubjectName, inputGradeName);
System.out.println(student.ClassName);
System.out.println("---------");
System.out.println(student_2.ClassName);
System.out.println(student_2.name);
System.out.println(student_2.grade);
System.out.println("---------");
}
}
Overloading 예제2 - 파일명 : StudentGrade.java 위치: package002
package package002;
public class StudentGrade {
public String ClassName = "4Class";
//필드에 선언할때 초기값을 설정
public String name;
public String subject;
public int grade;
public StudentGrade() {
}
//생성자 //매개변수선언 //외부에서받는다
//필드에 전달받은 값을 대입한다.
public StudentGrade(String input_name) {
this.name = input_name;
}
//매개변수이름이 같을 경우 this.붙여줌
// StudentGrade student_2 = new StudentGrade(inputStudentName, inputSubjectName, inputGradeName); 전달을 받는다
public StudentGrade(String input_name, String input_subject, int input_grade) {
this.name = input_name;
this.subject = "none Data";
this.grade = input_grade;
}
//매개변수의 갯수에 따라 스타일이 달라진다.
}
Java Run
예제3 - 파일명 : Main2.java <- package003에 있는것 불러오기
import java.util.*;
//scanner사용시 import
import package003.Mac;
public class Main2 {
public static void main(String[] arg){
Scanner input = new Scanner(System.in);
//scanner 클래스객체를 생성 = input
System.out.println("컴퓨터 종류를 입력하세요.");
//System.out.println(출력할데이터);
String input_name = input.nextLine();
//String str = scanner.nextLine();
//input이 scanner 클래스객체
//nextLine string을 읽음. 띄어쓰기 포함 한줄
//scanner의 메소드를 사용하여 입력받을 수 있다
System.out.println("CPU를 입력하세요.");
String input_CPU = input.nextLine();
//scanner 입력받기
System.out.println("RAM을 입력하세요.");
String input_RAM = input.nextLine();
//scanner 입력받기
System.out.println("SSD를 입력하세요.");
String input_SSD = input.nextLine();
//scanner 입력받기
input.close();
//scanner 사용종료 닫음
System.out.println("name ="+input_name+"// subject = "+input_CPU+"// grade = "+input_RAM+"// SSD = "+input_SSD);
//입력받은 값 전체 출력
Mac apple = new Mac(input_name, input_CPU, input_RAM, input_SSD);
//apple 에 Mac파일 대입 새로생성
System.out.println(apple.Macname);
//Mac파일에 이름 출력
System.out.println("----------");
}
}
예제3 - 파일명 : Mac.java 위치: package003
package package003;
public class Mac {
public String Macname = "macbookpro";
String name;
String CPU;
String RAM;
String SSD;
//입력받은 데이터 전달 받아 필드에 대입
public Mac(String input_name, String input_CPU, String input_RAM, String input_SSD) {
this.name = input_name;
this.CPU = input_CPU;
this.RAM = input_RAM;
this.SSD = input_SSD;
}
}
Java Run
정리 참고 원본 링크
https://private.tistory.com/25
https://whatisthenext.tistory.com/38
'STUDY > JAVA' 카테고리의 다른 글
[JAVA-이것이자바다.4장] 조건문과 반복문 확인 문제 (0) | 2022.07.06 |
---|---|
[JAVA] 22-07-06 인터페이스를 활용한 차 만들기 예제 ☑ (0) | 2022.07.06 |
[JAVA] 인터페이스 ! 개념 이해 추가 정리 ☑ (0) | 2022.07.04 |
[JAVA] 22-07-01 인터페이스를 활용한 문제해결 (0) | 2022.07.01 |
[JAVA] 22-07-01 인터페이스 ☑ (0) | 2022.07.01 |