JAVA TIL(4)


📚 ...一日に一度の知識の勉強と整理の文章。


📗 Javaオブジェクト


📌 static


通常、変数の静的キーワードは、メモリを共有するのではなく、プログラミング時にメモリを共有するためにより多く使用されます.

📌 データの非表示(getter、setter)

//Student Class
private String name;
private int score;

public Student(String n, int s) {
 this.name = n;
 this.score = s;
}

public void getInfo() {
System.out.println(" -- getInfo() --");
System.out.println(" name :" + name);
System.out.println(" score :" + score);
}

public String getName() {
	return name;
}
public int getScore() {
	return score;
}
public void setScore(int score) {
	if(score > 50) this.score = score;
}

//MainClass
{
Student student1 = new Student("홍길동", 90);
student1.getInfo();

student1.setScore(100);
student1.getInfo();
}
結果
---getInfo()---
name : 홍길동
score : 90
---getInfo()---
name : 홍길동
score : 100

📗 Java継承とクラス


📌 継承とは?


親を継承する子は、親のプロパティと機能も使用できます.
  • 継承の必要性:既存の検証済みクラスを使用して、新しいクラスを迅速かつ容易に作成できます.
  • extendsキーワードを使用して
  • 継承を実現
  • javaは単一継承(1つのクラスタのみ継承)
  • です.

    親のプライベート・アクセス者


    :子クラスは親クラスのすべてのリソースを使用できますが、プライベート・アクセス者のプロパティとメソッドは使用できません.

    📌 継承フィーチャー


    (1)メソッドオーバーライド(オーバーライド)


    :子クラスで親クラスの機能を再定義して使用します.
    public class ParentClass {
    
    	public void makeJJajang() {
        		System.out.println(" -- makeJJajang() START --");
        	}	
      }
      
    public class ChildClass extends ParentClass {
    	
        	@Override
    	public void makeJJajang() {
        		System.out.println(" -- more delicious makeJJajang() START --");
        	}	
      }
      
    ChildClass child = new ChildClass();
    child.makeJJajang();
    
    // 결과
    // -- more delicious makeJJajang()
    (2)データ型(タイプ)
    :基本資料型のように、クラスも資料型です.
    (3)オブジェクトクラス
    :すべてのクラスの最上位はObject Classです.
    (4)スーパークラス
    :親クラスを呼び出すときにスーパーキーを使用します.
    public class ParentClass {
    	int openYear = 1995;
        
    	public void makeJJajang() {
        	    System.out.println(" -- makeJJajang() START --");
        	}	
      }
      
    public class ChildClass extends ParentClass {
    	int openYear = 2000;
        
    	public void getOpenYear() {
        	    System.out.println("ChildClass's Open year : " + this.openYear);
                System.out.println("ParentClass's Open year : " + super.openYear);
      }
      
    ChildClass c = new ChildClass();
    c.getOpenYear();
    
    // 결과
    // ChildClass's Open year : 2000
    // ParentClass's Open year : 1995

    📌 匿名クラス


    :名前のないクラスで、主にメソッドの再定義に使用されます.익명 클래스는 인터페이스나 추상클래스에서 주로 이용된다.
    public class AnonymousClass {
    	public AnonymousClass() {
        	    System.out.println("AnonymousClass constructor"); 
            }
            
        	public void method() {
                System.out.println(" -- AnonymousClass's method START == ");
            }
     }
          
    // Main Class
    new AnonymousClass() {
    
        @Override
        public void method() {
          System.out.println(" -- AnonymousClass's Override method START -- ");
        };
    }.method();
    
    // 결과
    // -- AnonymousClass's Override method START --

    📌 インタフェース


    インタフェースとは?


    クラスとは異なり、オブジェクトは作成できません.これはクラスで実装する必要があるワークリストです.

    -なぜインタフェースを使う?


    :インタフェースを使用する理由はたくさんありますが、最大の原因はオブジェクトに複数のデータ型がある可能性があることです.

    -インタフェース実装


    :classの代わりにインタフェースキー、extendの代わりにimplementsキーを使用します.
    // InterfaceA
    public interface InterfaceA {
        public void funA();
    }
    
    //InterfaceB
    public interface InterfaceB {
        public void funB();
    }
    
    //ImplementClass
    public class ImplementClass implements InterfaceA, InterfaceB {
    
        @Override
        public void funA() { System.out.println("-- funA --"); }
        public void funB() { System.out.println("-- funB --"); }
    }

    -おもちゃのコネクタ


    :インタフェースを使用して、オブジェクトに複数のデータ型を持たせることができます.
    Toy robot = new ToyRobot();
    Toy airplane = new ToyAirplane();
    
    Toy toys[] = {robot, airplane};
    
    for (int i = 0; i < toys.length; i++) {
       toys[i].walk();
       toys[i].run();
       toys[i].alarm();
       toys[i].light();
       
       System.out.println();
    }
    
    //결과
    The robot can walk.
    The robot can run.
    The robot has no alarm function.
    The robot has light function.
    
    The airplane can not walk.
    The airplane can not run.
    The airplane has alarm function.
    The airplane has no light function.

    📌 抽象クラス


    抽象クラスとは?


    :クラスの共通部分を抽出し、個別のクラス(抽象クラス)として継承して使用します.

    -抽象クラスのフィーチャー

  • メンバー変数があります.
  • 抽象クラスを継承するにはextendsを使用します.
  • 抽象メソッドがあり、継承されたクラスで実装する必要があります.
  • の一般的な方法を持つこともできます.
  • の一般クラスと同様に、コンストラクション関数もあります.
  • 📌 インタフェースvs抽象クラス


    [共通点]


    (1)抽象的な方法を持つ.
    (2)オブジェクトを生成できず,資料型(タイプ)として使用する.

    [区別]


    -インタフェース
    :定数です.抽象的な方法しかありません.
    :抽象的なメソッドのみを実装します.
    :多形性をサポートします.
    -抽象クラス
    :クラスが持つすべての属性と機能があります.
    :抽象的なメソッドの実装と継承の機能を備えています.
    :単一継承のみがサポートされます.

    📌 ランダ式


    ランダ料理とは何ですか.
    :匿名関数を使用して匿名オブジェクトを作成する方法

    -ラムダ式を実現

    public interface LambdaInterface1 {
       public void method(String s1, String s2, String s3);
    }
    
    //Main Class
    LambdaInterface1 li1 = (String s1, String s2, String s3) -> { System.out.println(s1 + " " + s2 + " " + s3); };
    li1.method("Hello", "java", "World");
    
    // 매개변수가 1개이거나 타입이 같을 때, 타입을 생략할 수 있다.
    LambdaInterface2 li2 = (s1) -> { System.out.println(s1); };
    li2.method("Hello");
    
    // 실행문이 1개일 때, '{}'를 생략할 수 있다.
    LambdaInterface3 li3 = (s1) -> System.out.println(s1);
    li3.method("Hello");
    
    // 매개변수와 실행문이 1개일 때, '()'와 '{}'를 생략할 수 있다.
    LambdaInterface3 li4 = s1 -> System.out.println(s1);
    li4.method("Hello");
    
    // 매개변수가 없을 때, '()'만 작성한다.
    LambdaInterface3 li5 = () -> System.out.println("no param");
    li5.method();

    📌 文字列クラス


    文字列のStringクラス(オブジェクト)は、データが変化するとメモリ内の変化が大きく、速度が遅い.

    StringBuffer, StringBuilder


    :Stringクラスの欠点を補うクラスにデータが変更された場合、既存のオブジェクトはメモリから回収されます.
    StringBuffer sf = new StringBuffer("JAVA");
    sf.append("_8");
  • 文字列が変更されると、既存のオブジェクトが再利用されます.
  • 速度StringBuilderは少し速く、データ安定性StringBufferは少し良いです.
  • 📌 Collections


    📎 List
    :Listは、クラスがインデックスを使用してデータを管理するインタフェースです.

    📎 Map
    :Mapは、クラスがkeyを使用してデータを管理するインタフェースです.