JAVA(ジェネレータ、過負荷、過負荷)
5835 ワード
サマリ
コンストラクタ
new演算子とともに使用し、クラスからオブジェクトを作成するときに呼び出され、オブジェクトの初期化を担当します.
class Constructor {
Constructor() { // ← 요함수가 생성자
code...;
}
}
かふか
C言語などのプログラム向け言語では,1つの関数で1つの機能しか実現できない.ただし,Javaでは,1つのメソッド名を用いて複数の機能を実現することができる.
かふかじょうけん
class Main(){
int i = 0;
String s = A;
Overload var = new Overload();
var.method();
var.method(s);
var.method(s, i);
// 각각 3개의 메소드는 이름은 같지만, 각각 다른기능을 한다.
}
class Overload() {
void method() {
code...;
}
int method(String s){
code...;
return s;
}
String method(String s, int i){
code...;
return i
}
}
過剰
子クラスでの親からの継承方法の展開と再定義
※相続(相続)
public class Main {
public static void main(String[] args) {
Mother mother = new Mother();
Son son = new Son();
son.printMotherAge();
}
}
class Mother {
int motherAge = 50;
Mother() {
System.out.println("welcome to Super class");
}
public void printMotherAge() {
System.out.println("Mother's Age : " + motherAge);
}
}
class Son extends Mother {
int sonAge = 23;
Son() {
System.out.println("welcome to sub class");
}
}
Mother mother = new Mother();
Mainクラスでは、Motherクラスがインスタンス化され、コンストラクション関数が実行されます.Son son = new Son();
class Son extends Mother {
int sonAge = 23;
Son() {
System.out.println("welcome to sub class");
}
}
SonクラスはMotherクラスを継承している.Mainクラスでは、Sonクラスがインスタンス化されると、継承されたMotherクラスのジェネレータを一度実行し、独自のジェネレータを実行します.son.printMotherAge();
sonオブジェクトのメソッドにはprintMotherAgent()という関数は含まれませんが、Motherクライスを継承しているため、使用できます.結果
implements(継承)
なぜなら、1:1継承なら大丈夫だが、いずれも中上詐欺であれば「ダイヤモンド問題」が発生するからだ.
※ダイヤモンド問題
上記の例に示すように、GrandFatherクラスにmyMethod()というメソッドがあるとします.そして、もしFatheraとFatherbが相互運用を実現していたら、FatheraとFatherbを同時に継承するSonクラスにとって、どの親のmyMethod()を使うべきなのでしょうか?これによって衝突が生じる.
関連項目:https://siyoon210.tistory.com/125
例
public class ImpleTest {
public static void main(String[] args) {
InterfaceExam test1 = new InterfaceExam();
test1.func1();
System.out.println();
InterfaceTest1 test2 = new InterfaceExam();
test2.func1();
}
}
interface InterfaceTest1 {
int num = 123;
void func1();
void func2();
}
interface InterfaceTest2 {
int num = 1234;
void func1();
void func2();
void func3();
}
class InterfaceExam implements InterfaceTest1, InterfaceTest2 {
InterfaceExam() {
System.out.println("hahaha");
}
@Override
public void func1() {
System.out.println("hello");
}
@Override
public void func2() {
System.out.println("world");
}
@Override
public void func3() {
// TODO Auto-generated method stub
}
}
interface InterfaceTest1 {
int num = 123;
void func1();
void func2();
}
interface InterfaceTest2 {
int num = 1234;
void func1();
void func2();
void func3();
}
class InterfaceExam implements InterfaceTest1, InterfaceTest2 {
InterfaceExam() {
System.out.println("hahaha");
}
@Override
public void func1() {
System.out.println("hello");
}
@Override
public void func2() {
System.out.println("world");
}
@Override
public void func3() {
// TODO Auto-generated method stub
}
}
InterfaceTest 1もInterfaceTest 2もInterfaceExamを継承していますが、メソッドを再定義しました.再定義しない場合は、エラーが出力されます.
InterfaceExam test1 = new InterfaceExam();
test1.func1();
System.out.println();
InterfaceTest1 test2 = new InterfaceExam();
test2.func1();
test 1とtest 2にはそれぞれ異なる参照フォーマットがあるが、同じ結果が見られる.結果
※@Overrideの用途
@Annotationと直訳してコメントを表示します.これは一般的なコメントとは異なり、検証機能があります.
コードチェック時に上書きが実際に実行されていない場合は、コンパイル時にエラーが出力されます.
オーバレイアレンジ
Reference
この問題について(JAVA(ジェネレータ、過負荷、過負荷)), 我々は、より多くの情報をここで見つけました https://velog.io/@hyeon330/멀캠-풀스택-3일차오버로드-오버라이드-생성자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol