Java拡張オブジェクト


この章は何ですか。

  • オブジェクト向けの4つの特性に加えて、Javaはオブジェクト向けのキーワードと概念
  • を拡張するために使用される.
  • どんなキーワードですか?
  • abstract
  • ジェネレータ->
  • 省略
  • final
  • 演算子
  • の例
  • packageキーワード->
  • 省略
  • インタフェース&実装キーワード
  • このキーワード
  • スーパーキーワード
  • 1.abstractキーワード

  • の要約は?抽象化の意味抽象化とは?
    -特定の値が指定されていない共通のフィーチャーのみが抽出されます.
  • 抽象メソッド(抽象メソッド)
    -宣言されたが実施されていない方法
  • public abstract class 개발자 { //-> 추상 클래스
    	abstract void 코딩하다(); // 추상메소드 
    }
  • 抽象クラス(抽象クラス)
    -抽象メソッドの使用->抽象クラス
  • class Naver extends 개발자 {
    	@Override
    	void 코딩하다() {
        	// 네이버 웹툰을
        }
    }
    
    class 당근 extends 개발자 {
        @Override
        void 코딩하다() {
        	// 물건 판매 채팅을
        }
    }
    
    class 배민 extends 개발자 {
        @Override
        void 코딩하다() {
        	// 티켓 판매 쿠폰을
        }
    }

  • 長所は?抽象クラスを利用して,サブクラス(NAVER,ニンジン,出前)クラスに強制的に実施することができる.(強制実行漏れの可能性がある部分)

  • 要約すると,抽象クラスは共同開発が必要な部分を記録する部分であると考えられる.

  • 質問?抽象クラスのみを継承して使用しますか?!
  • 答えはNO
    私たちが使ったBaseTimeEntityを見てみましょう
    @Getter
    @MappedSuperclass
    @EntityListeners(AuditingEntityListener.class)
    public class BaseTimeEntity {
        @CreatedDate // entity가 생성되어 저장될때 시간이 자동 저장
        private LocalDateTime createdDate;
        @LastModifiedDate // entity 변경할때 시간이 자동 저장
        private LocalDateTime modifiedDate;
    }
  • 継承使用
  • 団は強制命令は必要ありません!理由は?継承されたクラスは抽象クラスではないからです!
  • 2.静的ブロック

  • ブロック
  • 、クラスの作成時にすぐにメモリに入ります
  • メモリを固定する場合は
  • を使用します.
    public class global {
    	public static String tcpIp = "192.168.1.101";
    	public static String port = 56;
    
    	public static String udpIP = "192.168.1.102";
    	public static int udpPort = 57;
        
    }
  • 静的ブロックとは?-
  • は汎用的な静的ブロック処理である
    public class global {
        static {
            int port=8080;
            String ip="192.168.1.172";
        }
      }

  • オブジェクトの静的(共通)として使用される部分に触れますか?!
    もし)タッチサービス1,サービス2−>静的HashMapは?!


  • Mapに変更された値が含まれているため、エラーが発生しました!

  • このロックを防止できるMapがあります:Concurrent HashMap
  • Concurrent HashMap

  • Thread-Safe、高性能
  • を同時に提供
  • マルチスレッド環境で安定した動作

  • 逆に、静的にオブジェクトに触れてもいいですか?!
    -答えはノー

  • 静的ブロックで使用可能なプロパティとメソッドは静的メンバーのみです.

  • オブジェクトメンバーにアクセスできません.

  • 静的ブロックは既にメモリに存在するため、オブジェクトからアクセスできます.

  • 静的ブロックにオブジェクトが見つからないためアクセスできません

  • 3.finalキーワード

  • 最後に、最後の単語
  • はどこですか.変数、メソッド、クラス
  • 変数に加算すると?
    - PI(3.141592...)考えてみればよい円の周長と幅は、不変の値で求めることができます.
  • メソッドに貼れば?
    -このクラスを使用する場合、使用を継承するときに上書きを禁止します.
  • public class 기밀문서 {
    	final void MAKED_1급비밀() {
        	// 절대 보안
        }
    
    }
    
    class 공군 extends 기밀문서 {
    	void MAKED_1급비밀() { // **컴파일 에러 발생!**
        
        }
    }
    
  • レッスンに貼ると?
    -継承は許可されません.
  • public final class 기밀문서 { // 상속 허락 안함 
    	
    }
    
    public class 육군 extends 기밀문서 {} //상속 못함
    

    4.instanceof演算子


    作成されたオブジェクトが特定のクラスのインスタンスであるかどうかを尋ねる演算子
  • .
    結果
  • のtrue or falseを返します.
  • class 동물 {
    
    }
    class 조류 extends 동물 {
    
    }
    class 펭귄 extends 조류 {
    
    }
    
    
    public class Test{
    	public static void main(String[] args) {
        	동물 동물객체=new 동물();
            조류 동물객체=new 조류();
            펭귄 펭귄객체=new 펭귄();
            
            동물객체 instanceof 동물; // true 
            
            조류객체 instanceof 동물; //true
            조류객체 instanceof 조류; //true 
            
      
            펭귄객체 instanceof 동물; //true
            펭귄객체 instanceof 조류; //true
            펭귄객체 instanceof 펭귄; //true
            
            펭귄객체 instanceof Object // true
           
        }
    }
  • というと?!
  •     	동물 동물객체=new 동물();
            동물 동물객체=new 조류();
            동물 펭귄객체=new 펭귄();
            
            동물객체 instanceof 동물; // true 
            
            조류객체 instanceof 동물; //true
            조류객체 instanceof 조류; //true 
            
      
            펭귄객체 instanceof 동물; //true
            펭귄객체 instanceof 조류; //true
            펭귄객체 instanceof 펭귄; //true
            
            펭귄객체 instanceof Object // true
  • LSP(リスク換算の原則)
    -親タイプのオブジェクトを子タイプのオブジェクトに変換すると、親タイプのプログラムが正常に実行されます.
  • メソッドが親タイプをパラメータとして使用する場合、このタイプのサブタイプは
  • として正常に動作することもできる.
    public int calucate(final Item item) {
    	return item.calcurate();
    }
    
    public int calucate(final Apple apple) {
    	return apple.calcurate();
    }
  • LSPを遵守しない典型的な問題矩形正方形問題
  • 矩形は正方形ではありませんが、正方形は矩形
  • です.
    public class Rectangle {
        private int width;
        private int height;
    
        public void setWidth(final int width) {
            this.width = width;
        }
    
        public void setHeight(final int height) {
            this.height = height;
        }
    
        public int getWidth() {
            return width;
        }
    
        public int getHeight() {
            return height;
        }
    }
    
    public class Square extends Rectangle {
    
        @Override
        public void setWidth(final int width) {
            super.setWidth(width);
            super.setHeight(width);
        }
    
        @Override
        public void setHeight(final int height) {
            super.setWidth(height);
            super.setHeight(height);
        }
    }
  • 他のクラスからRectangleを呼び出すと?!
    -非正方形長方形の場合、上記の方法は正常に動作します.
    例えば、横方向が3、縦方向が2の場合、縦方向は4
  • である.
        public void increaseHeight(final Rectangle rectangle) {
            if (rectangle.getHeight() <= rectangle.getWidth()) {
                rectangle.setHeight(rectangle.getWidth() + 1);
            }
        }
    
  • 正方形の場合は異なります.
  • 正方形の縦横長は常に等しいので、上記の方法を実行すると、縦横長はいずれも1ずつ増加し、長方形の長さは縦横よりも長いはずです.「家庭破綻
  • はこのようにコードを記述することができるが、増分Height()は拡張に使用されないため、オープンクローズの原則に反するコードである.
  •     public void increaseHeight(final Rectangle rectangle) {
            if (rectangle instanceof Square) {
                throw new IllegalStateException();
            }
    
            if (rectangle.getHeight() <= rectangle.getWidth()) {
                rectangle.setHeight(rectangle.getWidth() + 1);
            }
        }

  • 何が間違っていたの?!
    -継承が悪い.SquareクラスはRectangleクラスを継承できません.
  • の定理
  • 上級タイプに規定されている明細は、下級タイプも遵守できる場合は、継承します.
  • を継承する場合は、メソッドセットHeight()メソッドを定義する必要はありません.
  • はオープンな閉鎖原則であり、コードを自由に拡張する必要があり、コードを変更し続ける必要があります.
  • したがって、instacneof
  • を使用すると、LSPに違反しているかどうか疑わしい!

  • では、LSPを保護するためにどのように設計すればいいのでしょうか.


  • 継承を使用する場合は、階層図や組織図ではなく、ある~に基づいて継承を利用する必要があります.
       
  • 5.interfaceキーワードとimplementsキーワード

  • インタフェースでは、publicおよびabetarctを方法で省略することができる.(自動生成)
  • インタフェースでは、属性はpublic、static、finalを省略することができる.(自動貼り付け)
  • コード
  • interface Speakable {
    	double PI=3.14;
        	double ZEROPOINT=-275.15;
    	void sayHello();
    }
  • 上のコードは下のコードと同じです.
  • interface Speakable {
    	public static final double PI=3.14;
        	public static final double ZEROPOINT=-275.15;
        
            public abstract void sayHello();
    }
  • 継承VSインタフェースを再度見る
  • 継承:高度な
  • インターフェース(Implements):高度なインターフェース
  • に使用可能

    6.THISキーワードとSUPERキーワード


    THIS-オブジェクトは、自分の代わりに使用するキーワードを指します。

    class TT {
        int var=10;
    
        void test() {
            int var=20;
            System.out.println(var); // 20
            System.out.println(this.var); //10
        }
    
    }
  • 変数の名前が同じ(領域変数と属性の名前)場合、領域変数は
  • より優先されます.
  • オブジェクト変数
  • を使用

    SUPER-上の親のインスタンスを指定するキーワードです。

    class 사람 {
    	void method() {
        	System.out.println("사람");
        }	
    }
    
    class 네이버 extends 사람 {
    	void method() {
        	super.method(); // 사람 
        	System.out.println("네이버"); //네이버
        }	
    }
    
    class 네이버_웹툰 extends 네이버 {
    	void method() {
        	super.method(); // 네이버 
        	System.out.println("네이버_웹툰"); 
        }	
    }
    
    class 네이버_웹툰 extends 네이버 {
    	void method() {
        	super.super.method(); // 사람? NO 불가능 
        	System.out.println("네이버_웹툰"); 
        }	
    }
    

    7.追加?!

    Class 펭귄 {
    	void test() {
        // TEST
    }
    
    public class Driver {
    	    public static void main(String[] args) {
            펭귄 뽀로로 =new 펭귄();
            뽀로로.test(); 
            }
    }
    
  • ということで、シラサギが入っているように見えますが、実はペンギンが入っていました.
  • つまりペンギン対象で100個作ったら?!ヒップ領域は100個作成する必要があるが、実際には1つのオブジェクトメンバーtest()のみがワークスペースに存在し、オブジェクト参照変数
  • に渡す.
        펭귄 뽀로로1=new 펭귄();
        펭귄 뽀로로2=new 펭귄();
        펭귄 뽀로로3=new 펭귄();
        ...
        펭귄 뽀로로100=new 펭귄();
  • 疑問事項:自分で単一のトーンを保つという意味ですか?!
  • REFERENCE

  • https://gbs1995.tistory.com/17
  • https://steady-coding.tistory.com/383
  • https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rain483&logNo=220514873242