コンストラクタオーバーローディング
一つのクラスにコンストラクタを宣言する際には、一つ以上のコンストラクタを生成することができ、
Overloading(オーバーローディング)もできる。
Car(){ };
Car(String name) { };
Car(String name, int maxSpeed { };
しかし、オーバーローディングをすることで、重複コードが増える可能性もある。
Car(String model){
this.model = model;
this.color = "은색";
this.maxSpeed = 250;
}
Car(String model, String color){
this.model = model;
this.color = color;
this.maxSpeed = 250;
}
Car(String model, String color, int maxSpeed){
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
他のコンストラクタを呼び出し
この場合は、共通コードを一つのコンストラクタに集め、他のコンストラクタはthis(...)を使用して、共通コードを持っているコンストラクタを呼び出す方法で改善することができる。
<BEFORE>
Car(String model){
this(model, "은색", speed);
}
Car(String model, String color){
this(model, color, 250);
}
Car(String model, String color, int maxSpeed){
this.model = model;
this.color = color;
this.maxSpeed = speed;
}
<AFTER>
Car(String model){
this(model,"은색",250); step1
System.out.println("finished to initialized) <-step 6 run this command;
}
Car(String model, String color){
this(model, color , 250); step1
}
Car(String model, String color, int maxSpeed){ step2
this.model = model;
this.color = color; step3 -> step4 create and initialize step1's obejct step5 go back to construtor
this.maxSpeed = speed; create and initilaize step1's object
}
メソッドの宣言と呼び出し
<メソッドの宣言>
returnDateType methodName (parameter){ command } <-method block
void(リータン値がない)
package ch06.sec08.exam01;
public class Calculator {
//리턴값이 없는 메소드 선언
void powerOn() {
System.out.println("전원을 켭니다.");
}
//리턴값이 없는 메소드 선언
void powerOff() {
System.out.println("전원을 끕니다.");
}
//호출 시 두 정수 값을 전달받고,
//호출한 곳으로 결과값 int를 리턴하는 메소드 선언
int plus(int x, int y) {
int result = x + y;
return result;
}
//호출 시 두 정수 값을 전달받고,
//호출한 곳으로 결과값 double을 리턴하는 메소드 선언
double divide(int x, int y) {
double result = (double)x/(double)y;
return result;
}
}
<メソッドの呼び出し>
Datatype 変数 = メソッド();
外部のオブジェクトからメソッドを呼びだすため、インスタンスを生成し、リータン値をもらうデータータイプと変数を宣言し、.(オブジェクトアクセル演算子)を通して、メソッドを呼び出す。
package ch06.sec08.exam01;
public class CalculatorExample {
public static void main(String[] args) {
//Calculator 객체 생성
Calculator myCalc = new Calculator();
//리턴값이 없는 powerOn() 메소드 호출
myCalc.powerOn();
//plus 메소드 호출 시 5와 6을 매개값으로 제공하고,
//덧셈 결과를 리턴 받아 result1 변수에 대입
int result1 = myCalc.plus(5, 6);
System.out.println("result 1: "+ result1);
int x = 10;
int y = 4;
double result2 =myCalc.divide(x, y);
System.out.println("result 2: " + result2);
//리턴값이 없는 powerOff() 메소드 호출
myCalc.powerOff();
}
}
전원을 켭니다.
result 1: 11
result 2: 2.5
전원을 끕니다.
可変パラメータ with 配列
メソッドの宣言時、パラメータの個数を決めずに、パラメータの中に...を入力して宣言する場合もある。
intをリータンするsumメソッド宣言
int sum(int...value)
これを可変パラメータと呼び、アーギュメントは自動的に配列に変換され、メソッドより利用される。
こういったパラメータを可変パラメータという。
外部のオブジェクトよりsumメソッド呼び出す。その後、sumのリターン値をint型変数resultに代入したい。
int result = sum(1,2,3)
ここのアーギュメントはメソッドの可変パラメータより自動的に配列に変換され、メソッドブロックに入る。
int[] values {1,2,3};
int result = sum(values);
内部的にはパラメータが配列になっているため、直接配列をアーギュメントとして入れてもいい。
しかし、この場合は、配列が宣言が済んだ状況なので、必ず、インスタンスを生成して、入れる。
例)int result = sum(new int[] {1,2,3});
package ch06.sec08.exam02;
public class Computer {
//가변길이 매개변수 value를 가진 int값을 리턴하는 sum메소드를 선언
int sum(int ...value) { //가변길이 매개변수 value는 아직 내부적으로는
//길이가 정해지지 않는 int형 배열 value이다 ->int[] value
int sum=0; //value의 인덱스의 합을 담은 int형 변수 sum를 선언한다.
//위의 sum은 변수명이 아닌 메소드명의 sum이므로 중복이 아니다. 그러므로 변수에서도 사용가능하다.
for(int i=0; i<value.length;i++) {
sum += value[i];
}
//합산 결과를 return
return sum;
}
}
package ch06.sec08.exam02;
public class ComputerExample {
public static void main(String[] args) {
Computer myCom = new Computer();
int result1 = myCom.sum(1,2,3);
System.out.println("result1: " + result1);
int result2 = myCom.sum(1,2,3,4,5);
System.out.println("result2: " +result2);
int[] test = {1,2,3,4};
int result3 = myCom.sum(test);
System.out.println("result3: " +result3);
int result4 = myCom.sum(new int[] {1,2,3,4});
System.out.println("result4: " +result4);
}
}
<result>
result1: 6
result2: 15
result3: 10
result4: 10
'IT自主学習 (2023.05.23~) > Java(2023.05.23~)' 카테고리의 다른 글
プログラミング自主学習 43日目 final・constant/package・import (0) | 2023.07.08 |
---|---|
プログラミング自主学習 42日目 Method(overloading)/Instance Member/Static Member (0) | 2023.07.07 |
プログラミング自主学習 40日目 Class/field/constructor (0) | 2023.07.05 |
プログラミング自主学習 39日目 Enum/Object (0) | 2023.07.04 |
プログラミング自主学習 38日目 多次元配列/String[]/配列の複製/配列の総合/String[] args (0) | 2023.07.03 |