TIL(2022.03.16)


クラスメンバーVSオブジェクトメンバー=静的メンバーVSインスタンスメンバー

  • オブジェクト
    -ユニークなエンティティ
    -属性に値がある
  • クラス
    -コンセプト
    -分類体系
    -属性には値がありません
  • =>同じクラスのすべてのオブジェクトに同じ値がある場合は、メモリを節約するためにクラスに保存できます.
    package ex03.abstraction02;
    
    public class Mouse {
    	public String name;
    	public int age;
    	public static int countOfTail = 1; // 쥐 , 제리 , 미키의 꼬리는 모두 1개이므로 같은 유형의 모든 객체가 같은 값을 가지고 있다면 클래스 속성에 저장
    	
    	public void sing() {
    		System.out.println(name +" 찍찍!!");
    	}
    }
    
    package ex03.abstraction02;
    
    public class MouseDriver {
    	public static void main(String[] args) {
    		Mouse.countOfTail = 1;
    		
    		
    		Mouse mickey = new Mouse();
    		Mouse jerry = new Mouse();
    		Mouse mightyMouse = new Mouse();
    		
    		//객체 참조 변수.속성명으로 접근
    		System.out.println(mickey.countOfTail); 
    		System.out.println(jerry.countOfTail);
    		System.out.println(mightyMouse.countOfTail);
    		
    		//클래스명.속성명으로 접근
    		System.out.println(Mouse.countOfTail);
    		
    	}
    }
    

  • クラスメンバー=静的メンバー=静的メンバー
    - static
    -クラスメンバーのプロパティ
    通常、すべてのオブジェクトに同じ値がある場合に使用されます.
    クラスがTメモリの静的領域に配置されると、クラス内部からメモリ領域が解放される.
    -クラスメンバーメソッド
    オブジェクトが存在するかどうかにかかわらず、使用できる方法

  • オブジェクトメンバー=インスタンスメンバー
    -オブジェクトメンバーのプロパティ
    属性名のみで、実際のメモリ領域はありません.hipzoneでオブジェクトを作成するときにメモリ領域を割り当てる
    -オブジェクトメンバーメソッド

  • クラス属性とオブジェクト属性は別々に初期化されていません.整数は0、実数は0.0、論理はfalse、オブジェクトはnullに初期化されます.

  • ゾーン変数を個別に初期化
  • 継承:再利用+拡張

  • オブジェクトへの継承は、親のプロパティを子から継承(プロパティ継承)し、必要なプロパティを追加できることを意味します.つまり、拡張して使用できます!!
  • 親-子=スーパークラス-子
  • ますます抽象化されて
  • 高級になり、一般化された
  • サブクラスの方向に発展し、専門化
  • サブクラスは上位クラス
  • である.
  • 継承(拡張)
  • 継承された強力な機能

    package ex03.inheritance01;
    
    public class 동물 {
    	String myClass; // 객체 변수
    	
    	public 동물() { // 생성자
    		myClass = "동물";
    	}
    	
    	void showMe() { // 객체 메서드
    		System.out.println(myClass);
    	}
    }
    
    package ex03.inheritance01;
    
    public class 포유류 extends 동물{
    	public 포유류() {
    		myClass = "포유류";
    	}
    }
    
    package ex03.inheritance01;
    
    public class 조류 extends 동물 {
    	public 조류() {
    		myClass = "조류";
    	}
    }
    
    package ex03.inheritance01;
    
    public class 고래 extends 포유류 {
    	public 고래() {
    		myClass = "고래";
    	}
    }
    
    package ex03.inheritance01;
    
    public class 박쥐 extends 포유류{
    	public 박쥐() {
    		myClass = "박쥐";
    	}
    }
    
    package ex03.inheritance01;
    
    public class 참새 extends 조류{
    	public 참새() {
    		myClass = "참새";
    	}
    }
    
    package ex03.inheritance01;
    
    public class 펭귄 extends 조류 {
    	public 펭귄() {
    		myClass = "펭귄";
    	}
    }
    
    package ex03.inheritance01;
    
    public class Driver01 {
    	public static void main(String[] args) {
    		동물 animal = new 동물();
    		포유류 mammalia = new 포유류();
    		조류 bird = new 조류();
    		고래 whale = new 고래();
    		박쥐 bat = new 박쥐();
    		참새 sparrow = new 참새();
    		펭귄 penguin = new 펭귄();
    		
    		//상위 클래스에서만 showme()메서드를 구현했지만 하위 클래스 객체에서 showMe() 사용할 수 있다. => 재사용
    		animal.showMe();
    		mammalia.showMe();
    		bird.showMe();
    		whale.showMe();
    		bat.showMe();
    		sparrow.showMe();
    		penguin.showMe();
    	}
    }
    
    package ex03.inheritance01;
    
    public class Driver02 {
    	public static void main(String[] args) {
    		
    		// 하위클래스는 상위클래스이다.
    		동물 animal = new 동물();
    		동물 mammalia = new 포유류();
    		동물 bird = new 조류();
    		동물 whale = new 고래();
    		동물 bat = new 박쥐();
    		동물 sparrow = new 참새();
    		동물 penguin = new 펭귄();
    		
    		animal.showMe();
    		mammalia.showMe();
    		bird.showMe();
    		whale.showMe();
    		bat.showMe();
    		sparrow.showMe();
    		penguin.showMe();
    	}
    }
    
    package ex03.inheritance01;
    
    public class Driver03 {
    	public static void main(String[] args) {
    		
    		// 하위클래스는 상위클래스이다.
    		동물[] animals = new 동물[7];
    		
    		animals[0] = new 동물();
    		animals[1] = new 포유류();
    		animals[2] = new 조류();
    		animals[3] = new 고래();
    		animals[4] = new 박쥐();
    		animals[5] = new 참새();
    		animals[6] = new 펭귄();
    		
    		for(int i=0;i<animals.length;i++) {
    			animals[i].showMe();
    		}
    	}
    }
    

    継承は関係です

  • サブクラスは親
  • です.
    ペンギン
  • は鳥類
  • です
  • オブジェクトへの継承はサブクラスの特性
  • を再利用する.
  • オブジェクトへの継承は、親のプロパティ
  • を拡張する.
  • オブジェクト向け継承は
  • を満たす関係である

    マルチ継承とJava

  • javaがマルチ継承をサポートしていないのは、再使用または拡張時にどのコンテンツを再使用および拡張する必要があるかを判断できないためです.
    =>ではなくインタフェースが導入されています.