흑마 프로그래머 - 대상편을 향한 다태

-------android 교육,java 교육,당신과 교류하기를 기대합니다!------------
다태
정의: 어떤 사물의 다양한 존재 형태.
예:동물 중 고양이, 개.
고양이라는 대상에 대응하는 타입은 고양이 타입입니다.
고양이 x = new 고양이();
고양이도 동물 중의 하나로 고양이를 동물이라고 할 수 있다.
1. 다태적 표현.
부류의 인용은 자신의 자류의 대상을 가리킨다.
부류의 인용도 자신의 부류 대상을 받아들일 수 있다.
2. 다태적 전제.
반드시 클래스와 클래스 사이에 관계가 있어야 한다. 계승하든지, 실현하든지.
덮어쓰기가 존재한다는 전제가 있습니다.
3. 다태적 이해득실.
이점: 다태적 출현은 프로그램의 확장성을 크게 향상시켰다.
폐단: 부류의 인용만 부류의 구성원에 접근할 수 있습니다.
4. 다태적 응용.
코드 예:
/*
  :
      ,        
*/
interface PCI
{
    public void open();
    public void close();
}
class MainBoard
{
    public void run()
    {
        System.out.println("mainboard run");
    }
    public void usePCI(PCI p)//PCI p = new NetCard();              。
    {
        p.open();
        p.close();
    }
}
class NetCard implements PCI
{
    public void open()
    {
        System.out.println("netcard open");
    }
    public void close()
    {
        System.out.println("netcard close");
    }
}
class SoundCard implements PCI
{
    public void open()
    {
        System.out.println("soundcard open");
    }
    public void close()
    {
        System.out.println("soundcard close");
    }
}
class  DuoTaiDemo5
{
    public static void main(String[] args)
    {
        MainBoard mb = new MainBoard();
        mb.run();
        mb.usePCI(new SoundCard());
    }
}

하위 클래스 대상의 특유한 방법을 사용하려면 대상이 어떤 구체적인 하위 클래스 유형인지 어떻게 판단합니까?
키워드 instanceof를 통과할 수 있습니다.대상이 지정한 인터페이스를 실현하거나 지정한 클래스를 계승했는지 판단한다.
형식: 대상instanceof 형식으로 대상이 지정한 형식에 속하는지 판단합니다.
       Studentinstanceof Person = true;//학생은 개인류를 물려받았어요.
다태가 자부류의 구성원에 나타난 특징:
1, 구성원 변수: 다중태에서 자부류 구성원 변수는 동명이다.
컴파일 시기: 인용형 변수에 속하는 클래스에 호출된 구성원이 있는지 참고합니다.(컴파일할 때 대상이 생기지 않고 문법 오류만 검사함)
실행 시기: 인용형 변수가 속하는 클래스에 호출된 구성원이 있는지 참고합니다.
간단한 말: 컴파일링과 운행을 막론하고 구성원 변수는 변수가 속하는 클래스의 구성원 변수를 참조한다.
더 쉽게 기억할 수 있는 것은 구성원 변수 - 컴파일 실행 모두 = 왼쪽이다.
2, 구성원 함수.
컴파일 시기: 인용형 변수에 속하는 클래스에서 호출하는 방법이 있는지 참고하십시오.
실행 사항: 대상이 속한 클래스에서 호출하는 방법이 있는지 참고하십시오.
왜 그런 거죠?하위 부모 클래스에서 똑같은 구성원 함수에 대해 덮어쓰기 특성이 있기 때문이다.
간단하게 말하자면 구성원 함수, 인용형 변수에 속하는 클래스를 컴파일하고 대상에 속하는 클래스를 실행한다.
더욱 간단하다: 구성원 함수 - 컴파일해 보다 = 왼쪽, 실행해 보다 = 오른쪽.
3, 정적 함수.
컴파일 시기: 인용형 변수에 속하는 클래스에 호출된 구성원이 있는지 참고합니다.
실행 시기: 인용형 변수가 속하는 클래스에 호출된 구성원이 있는지 참고합니다.
왜 그런 거죠?정적 방법은 사실 대상에 속하지 않고 이 방법이 있는 종류에 속하기 때문이다.
정적 방법을 사용합니다. 어떤 종류의 인용을 사용합니까?
간단하게 말하면 정적 함수 - 컴파일 실행 모두 = 왼쪽.
Objiec 클래스
equals 메서드, toString 메서드
예:
/*object:              ,      。
                   。
                ,        。
           ,             。     。
*/
class Demo
{
    private int num;
    Demo(int num)
    {
        this.num = num;
    }
    public boolean equals(Object obj)//  object   
    {
        if (obj instanceof Demo)
        {
            return false;
        }
        Demo d = (Demo)obj;
        return this.num ==d.num;
    }
    public String toString()//  object   
    {
        return "Demo:"+num
    }
}
class ObjectDemo
{
    public static void main(String[] args)
    {
        Demo d1 = new Demo(4);
        //Demo d2 = new Demo(5);
        //System.out.println(d1.equals(d2));
        //d1.getClass().getName();  d1 class  ,   getName  。
        System.out.println(d1.getClass().getName()+"@"+Integer.toHexString(d1.hashCode()));
        System.out.println(d1.toString());
                                                                                                                                       
    }
}

내부 클래스
내부 클래스 액세스 규칙:
1. 내부 클래스는 외부 클래스의 구성원을 직접 방문할 수 있으며 사유를 포함한다.
외부 클래스의 구성원을 직접 방문할 수 있는 이유는 외부 클래스에 외부 클래스의 인용이 있기 때문이다.형식은: 외부 클래스 이름입니다.this
2. 외부 클래스가 내부 클래스에 접근하려면 내부 클래스의 대상을 만들어야 한다.
액세스 형식:
1. 내부 클래스가 외부 클래스의 구성원 위치에 정의되고 사유가 아니면 외부 다른 클래스에서 내부 클래스 대상을 직접 구축할 수 있다.
형식:외부 클래스 이름.내부 클래스 이름 변수 이름 = 외부 클래스 대상.내부 클래스 대상;
                 Outer.Inner in = new Outer().Inner();
2, 내부 클래스가 구성원 위치에 있으면 구성원 수식부에 의해 수식될 수 있다.
예를 들어:private: 내부 클래스를 외부 클래스에 봉인합니다.
static: 내부 클래스는 static의 특성을 갖추고 있습니다.
내부 클래스가static에 의해 수식되면 외부 클래스의static 구성원만 직접 접근할 수 있고 접근 제한이 발생합니다.
외부의 다른 클래스에서 어떻게 static 내부 클래스의 비정상적인 구성원을 직접 방문합니까?new Outer.Inner().function();
외부의 다른 클래스에서 어떻게 static 내부 클래스의 정적 구성원을 직접 방문합니까?Outer.Inner.function();
주의: 내부 클래스에 정적 구성원이 정의되어 있으면, 이 내부 클래스는static이어야 합니다.
외부 클래스의 정적 방법이 내부 클래스에 접근할 때 내부 클래스는 정적이어야 한다.
3, 내부 클래스가 부분적으로 정의된 경우:
1, 멤버 수식부에 수식되어서는 안 된다.
2, 외부 클래스의 구성원을 직접 방문할 수 있습니다. 외부 클래스의 인용이 있기 때문입니다.그러나 그가 있는 부분의 변수에 접근할 수 없으며final에 의해 수식된 부분의 변수에만 접근할 수 있다.
내부 클래스 사용:
사물을 묘사할 때 사물 중의 내부에 또 사물이 있는데 이 사물은 내부류로 묘사한다.
내부 사물은 외부 사물의 내용을 사용하기 때문이다.
내부 클래스를 컴파일한 파일의 이름은'외부 클래스 이름 $내부 클래스 이름.java'입니다.
익명 내부 클래스:
1. 익명 내부 클래스는 내부 클래스의 간략한 형식이다.
2. 익명 내부 클래스를 정의하는 전제: 내부 클래스는 하나의 클래스를 계승하거나 인터페이스를 실현해야 한다.
3, 익명 내부 클래스의 형식: new 부모 클래스나 인터페이스 (전송 가능한 파라미터) {하위 클래스의 내용을 정의합니다}
4, 사실 익명 내부 클래스는 익명 하위 클래스의 대상이다.그리고 이 상대는 좀 뚱뚱해요.내용이 있는 대상으로 이해할 수 있다.
5, 익명 내부 클래스에 정의된 방법은 2개, 즉 1개 또는 2개를 넘지 않는 것이 좋다.
코드 예:
/*object:              ,      。
                   。
                ,        。
           ,             。     。
*/
class Demo
{
    private int num;
    Demo(int num)
    {
        this.num = num;
    }
    public boolean equals(Object obj)//  object   
    {
        if (obj instanceof Demo)
        {
            return false;
        }
        Demo d = (Demo)obj;
        return this.num ==d.num;
    }
    public String toString()//  object   
    {
        return "Demo:"+num
    }
}
class ObjectDemo
{
    public static void main(String[] args)
    {
        Demo d1 = new Demo(4);
        //Demo d2 = new Demo(5);
        //System.out.println(d1.equals(d2));
        //d1.getClass().getName();  d1 class  ,   getName  。
        System.out.println(d1.getClass().getName()+"@"+Integer.toHexString(d1.hashCode()));
        System.out.println(d1.toString());
          
    }
}

좋은 웹페이지 즐겨찾기