> Java > java지도 시간 > 본문

Java 객체지향 프로그래밍의 객체, 참조, 내부 클래스에 대한 이해

高洛峰
풀어 주다: 2017-01-20 17:36:15
원래의
1561명이 탐색했습니다.

최근 퇴근하면서 Think in Java를 봤는데 처음 다시 읽었을 때와 느낌이 많이 달랐어요
다음으로 Java에서 객체와 참조의 관계에 대해 이야기해보겠습니다. 내부 클래스의 개념.
1. Java의 모든 것은 객체입니다.
Java의 객체를 제어하는 ​​것은 무엇입니까? 대답은 C나 C++의 포인터와 같은 참조입니다.
참조가 있는 경우 지금 개체와 연결해야 합니다. 그렇지 않으면 참조가 상상한 대로 제어할 수 없게 됩니다. 예를 들어 문자열 참조를 생성하는 경우:

String s ;
로그인 후 복사

은 이때 어떤 객체와도 연관되어 있지 않습니다. String의 일부 메소드를 호출하는 등의 작업을 수행하면 분명히 문제가 발생합니다(일부 기본 유형을 제외하면 초기 유형이 할당되기 때문입니다). ​​값을 정의할 때), 돈은 사용할 때 객체와 연결되어야 합니다:

String s = new String();
로그인 후 복사

또는

String s = “my name is ajun”;
로그인 후 복사

처럼 이것.
2. 객체와 연결하는 방법
Java에서 객체는 일반적으로 다음과 같이 참조와 연결하기 위해 new를 통해 생성됩니다.

String s = new String("my name is ajun")
로그인 후 복사

객체는 참조 s와 연관되어 동시에 초기화되며, 동시에 자체 객체 유형을 생성할 수도 있습니다.
3. 저장 위치
(1) 스택: 일반적으로 스택 포인터를 상하로 이동하여 메모리를 할당하고 해제합니다.
기본형 변수는 적은 양의 메모리를 차지하기 때문에 new로 생성하기에 적합하지 않습니다.
(2) 힙: Java 객체를 저장하는 데 사용됩니다. 프로그램이 new를 실행할 때 힙은 이 객체에 공간을 할당합니다. 힙에 의한 메모리 할당 및 해제는 저장 및 해제보다 비용이 더 많이 듭니다. 즉, 기본형 변수는 가장 많이 사용되기 때문에 스택에 저장해야 하고, 메모리를 더 많이 소모하면 성능을 짐작할 수 있다.
4. 내부 클래스
(1) 내부 클래스에 대한 기본 지식:
일반적으로 자바 클래스 내부에 정의된 클래스는 내부 클래스가 된다.
내부 클래스는 메소드 본문 외부에 정의된 클래스, 클래스로 나눌 수 있다. 메소드 내부 정의, 정적 내부 클래스(메소드 외부에서만 정의 가능), 익명 내부 클래스
설명:
메소드 외부에서 정의된 클래스:
클래스의 멤버 변수(정적, 비정적) Access가 될 수 있습니다. 클래스의 멤버 변수가 올바르게 참조될 수 있도록 하려면 내부 클래스의 객체가 인스턴스화되기 전에 먼저 외부 클래스의 객체가 인스턴스화되어야 합니다.
액세스 권한은 무엇이든 될 수 있습니다. 클래스의 멤버 변수로 간주할 수 있으므로 이해하기가 훨씬 쉽습니다.
메서드 본문에 정의된 클래스;
클래스의 멤버 변수(정적 및 비정적)에 액세스할 수 있으므로 클래스의 멤버 변수를 올바르게 참조할 수 있습니다. 외부 클래스를 먼저 인스턴스화해야 합니다. 내부 클래스를 인스턴스화하는
개체는 액세스 권한을 가질 수 없습니다. 메서드의 로컬 변수로 취급하면 됩니다.
정적 내부 클래스:
클래스의 정적 멤버 변수에만 접근 가능
접근 권한 모두
익명 내부 클래스:
클래스의 멤버 변수(정적, 비정적)에 접근 가능 , 클래스의 멤버 변수를 올바르게 참조하려면 내부 클래스의 객체를 인스턴스화하기 전에 먼저 외부 클래스의 객체를 인스턴스화해야 합니다.
액세스 권한은
(2), 내부 클래스의 역할
내부 클래스는 클래스를 매우 잘 숨길 수 있습니다. 일반적으로 클래스에는 개인 보호 기본 접근 권한이 허용되지 않습니다.
내부 클래스는 다중 상속을 구현할 수 있으며, 이는 Java가 다중 상속을 가질 수 없다는 사실을 보완합니다.
(3), 예

package com.ajun.test.innerclass.example;
  
/**
 * 水果内容
 * @author Administrator
 *
 */
public interface Contents {
   String value();
}
 
package com.ajun.test.innerclass.example;
  
/**
 * 水果目的地
 * @author Administrator
 *
 */
public interface Destination {
  
  //目的地
  String readLabel();
}
 
package com.ajun.test.innerclass.example;
  
public class Goods {
  
  private String des="is ruit!!";
    
  //方法外部
  private class Content implements Contents{
    private String name = "apple "+des;
    @Override
    public String value() {
      return name;
    }
  }
    
  //方法外部
  private class GDestination implements Destination{
    private String label ;
    private GDestination(String label){
      this.label= label;
    }
    @Override
    public String readLabel() {
      return label;
    }
  }
    
    
  //匿名内部类
  public Destination getdestination(final String label){
    return new Destination(){
      @Override
      public String readLabel() {
        return label;
      }
    };
  }
    
  public Destination dest(String s){
    return new GDestination(s);
  }
    
  public Contents content(){
    return new Content();
  }
    
  public Destination dest2(String s){
    class GDestination implements Destination{
        private String label;
        private GDestination(String label){
          this.label= label;
        }
        @Override
        public String readLabel() {
          return label;
        }
    }
    return new GDestination(s);
  }
    
}
 
package com.ajun.test.innerclass.example;
  
public class Test {
  
  public static void main(String [] a){
    Goods gs = new Goods();
    Contents c = gs.content();
    Destination d = gs.dest("Beijing");
    System.out.println(c.value());
    System.out.println(d.readLabel());
    Destination d1 = gs.getdestination("Shanghai");
    System.out.println(d1.readLabel());
    System.out.println(gs.dest2("Tianjin").readLabel());
  }
}
로그인 후 복사

그 중 Content 와 Gdestination 은 잘 숨겨져 있어 외부에서 호출할 때 어떤 특정 클래스가 호출되는지 전혀 알 수 없기 때문에 이 클래스는 다중 상속의 특징을 가지고 있습니다.

apple is ruit!! 
Beijing 
Shanghai 
Tianjin
로그인 후 복사

Java 객체지향 프로그래밍의 객체, 참조 및 내부 클래스에 대한 이해와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿