一、内部类是什么?
内部类是一类特殊的类,指的是定义在一个类的内部的类。实际开发中,为了方便的使用外部类的相关属性和方法,这时候通常会定义一个内部类。

二、内部类的作用
- 内部类提供了更好的封装,只能让外部类直接访问,不允许同一个包中的其他类直接访问。
- 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员,但外部类不能访问内部类的内部属性。
三、内部类的分类
1、非静态内部类
- 非静态内部类必须寄存在一个外部类对象里。因此,如果有一个非静态内部类对象,那么一定存在对应的外部类对象,非静态内部类对象单独属于外部类的某个对象。
- 非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类的成员。
- 非静态内部类不能有静态方法、静态属性和静态初始化块。
- 成员变量访问要点:①内部类里方法的局部变量:变量名;②内部类属性:this.变量名;③外部类属性:外部类名.this.变量名。
package com.testInnerClass;
public class Face {
private String shape = "国字脸";
class Nose{
private String shape = "高鼻梁";
public void breath(){
System.out.println("鼻子长在了"+Face.this.shape+"形状的脸上");
System.out.println("呼吸!");
}
}
class Ear{
}
class Eye{
}
public static void main(String[] args){
Face.Nose nose = new Face().new Nose();
nose.breath();
}
}
输出结果:
鼻子长在了国字脸形状的脸上
呼吸!
package com.testInnerClass;
//外部类
public class Outer1 {
private int age = 10;
private void show(){
System.out.println("show something!");
}
//内部类
public class Inner{
private String name = "deaoyi";
private int age = 20;
public void showInner(){
System.out.println("Inner.showInner");
System.out.println(age);
System.out.println(Outer1.this.age); //当外部类、内部类属性重名时可以这样操作
show(); //内部类可以直接使用外部类的成员
}
}
public static void main(String[] args){
Outer1.Inner inn01 = new Outer1().new Inner();
inn01.showInner();
Outer1 out02 = new Outer1();
Inner inn02 = out02.new Inner();
inn02.showInner();
}
}
输出结果:
Inner.showInner
20
10
show something!
Inner.showInner
20
10
show something!
2、静态内部类
定义方式:
static class ClassName{
//类体
}
使用要点:
- 静态内部类可以访问外部类的静态成员,不能访问外部类的普通成员
- 静态内部类可看作外部类的一个静态成员
3、匿名内部类
package com.testInnerClass;
//测试匿名内部类
public class TestAnonymousInnerClass {
public void test(A a){
a.run();
}
public static void main(String[] args){
TestAnonymousInnerClass tai = new TestAnonymousInnerClass();
tai.test(new AA()); //常规操作
//匿名内部类
tai.test(new A() {
@Override
public void run() {
System.out.println("TestAnonymousInnerClass.run1111");
}
});
tai.test(new A() {
@Override
public void run() {
System.out.println("TestAnonymousInnerClass.run2222");
}
});
//每调用一次都是新的
}
}
//有名字的类,可以反复使用
class AA implements A{
public void run(){
System.out.println("AA.run");
}
}
interface A{
void run();
}
输出结果:
AA.run
TestAnonymousInnerClass.run1111
TestAnonymousInnerClass.run2222
4.局部内部类
定义在方法内部,作用域仅限于本方法,称为局部内部类。极少见。
package com.testInnerClass;
public class TestLocalClass {
public void show(){
class Inner{
public void fun(){
System.out.println("hello!");
}
}
Inner inn = new Inner();
inn.fun();
}
public static void main(String[] args){
new TestLocalClass().show();
}
}
输出结果:
hello!
本文详细介绍了Java内部类的概念、作用及其四种分类:非静态内部类、静态内部类、匿名内部类和局部内部类,并通过具体示例展示了它们的使用方法。
——内部类&spm=1001.2101.3001.5002&articleId=115026314&d=1&t=3&u=7185a46d50db40a498c373e52d080b09)
3768

被折叠的 条评论
为什么被折叠?



