사실 이름에서 알 수 있듯이 내부 클래스는 클래스 내의 클래스이고, 클래스 내에 또 다른 클래스가 있습니다.
내부 클래스는 4가지로 나누어집니다.
1. 일반 내부 클래스
2. 정적 내부 클래스
4. 익명 내부 클래스
하나씩 알아볼까요~ ~
A. 일반 내부 클래스:먼저 코드를 통해 이해해 봅시다:
package InternalClass; /** * 内部类 */ public class Car { public int a = 10; public int b = 20; //外部类的方法 public void method() { System.out.println("我是外部类Car的普通方法!"); bus b = new bus(); //创建内部类的对象 b.internalMethod(); } //内部类(在Car类中的bus类) public class bus { int b = 30; //内部类方法 public void internalMethod() { System.out.println("**这是bus内部类的普通方法!"); System.out.println("**我是内部类,现在在访问外部类Car的a:" + a); System.out.println("**我是内部类,现在在访问内部类bus的b:" + this.b); System.out.println("**我是内部类,现在在访问外部类bus的b:" + Car.this.b); //注意,如果在内部类需要使用外部类的属性,必须通过外部的类去this外部类的属性 } } //程序运行入口: public static void main(String[] args) { Car car = new Car(); //创建外部类的对象 car.method(); // 运行上面的代码 会输出 : 我是外部类Car的普通方法! //运行内部类的方法 //在上面method方法中已经创建了内部类bus的对象b //这里就是通过使用外部类Car的对象car去new一个内部类对象 bus b = car.new bus(); //通过内部类对象b 去使用方法即可 b.internalMethod(); //输出: /* **这是bus内部类的普通方法! **我是内部类,现在在访问外部类Car的a:10 **我是内部类,现在在访问内部类bus的b:30 **我是内部类,现在在访问外部类bus的b:20 */ } }
정적 내부 클래스도 이름에서 알 수 있듯이 내부 클래스를 static으로 수정합니다. 객체를 생성하지 않고 호출하려면 외부 클래스 이름을 사용하세요:
package InternalClass; public class Person { String name = "小王"; static int age = 20; //创建静态内部类 public static class Student{ String name = "小红"; //静态内部类的方法 public static void study(){ Person p = new Person(); //创建外部类的对象 //静态访问非静态需要使用对象去调用 System.out.println("内部类静态方法访问外部非静态成员:"+p.name); System.out.println("内部类静态方法访问外部静态成员:"+Person.age); System.out.println("内部类静态方法访问内部非静态成员:"+new Student().name); } } //程序运行入口 public static void main(String[] args) { //静态内使用方法不需要创建对象 Student.study(); } /* 输出: 内部类静态方法访问外部非静态成员:小王 内部类静态方法访问外部静态成员:20 内部类静态方法访问内部非静态成员:小红 */ }
메소드 내부 클래스는 이름에서 알 수 있듯이 외부 클래스의 메소드 본문:
package InternalClass; /** * 方法内部类 */ public class Student { //方法 public void study(){ int age = 20; String name = "小王"; //在方法内写类:方法内部类 class child{ //方法内部类的方法 public void play(){ System.out.println("孩子喜欢玩!"); } } //在外部类study的方法内创建一个生成内部类child的对象,并使用方法 child c = new child(); c.play(); } //程序执行入口 public static void main(String[] args) { Student stu = new Student(); //这里调用study方法后,在study方法体内创建了child的对象和调用了play的方法 stu.study(); } } //输出:我叫:小王我今年:20我爱学习 // 孩子喜欢玩!
1 클래스 앞에는 액세스 수정자가 있을 수 없습니다.
2.
3. 정적 정보는 생성할 수 없습니다.
4. 직접 액세스할 수 있습니다. 메소드 내의 로컬 변수 및 매개변수는 수정할 수 없습니다.
5. 외부 클래스의 모든 정보에 자유롭게 액세스할 수 있습니다.
D. 익명 내부 클래스:익명 내부 클래스는 이름이 없는 내부 클래스입니다.
먼저 정의하세요. 인터페이스:
public interface USB { void read(); }
package InternalClass; /** * 匿名内部类 */ public class Child { public static void main(String[] args) { USB u = new USB() { @Override public void read() { System.out.println("这是匿名内部类,是USB接口没有具名的子类,必须重写 接口做具体实现"); } }; u.read(); } }
1. 클래스는 정적 멤버나 메소드를 정의할 수 없습니다.
2. 익명 내부 클래스의 메소드는 추상일 수 없습니다.
3. 익명 내부 클래스는 인터페이스 또는 추상 상위 클래스의 모든 추상 메소드를 구현해야 합니다.
4. 외부 클래스 멤버 변수 또는 익명 내부 클래스에서 액세스하는 멤버 메서드는 static으로 수정해야 합니다.
내부 클래스 요약:
2. 내부 클래스의 이점:
위 내용은 Java 내부 클래스 인스턴스 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!