内部类

内部类

可以将一个类定义到另一个类的内部

成员内部类

将一个类直接定义在类的里面,与属性或方法层次一致
和正常的类一样,可以用不同的修饰符

优点
1、省略一个.java文件
2、可以访问外部类所有的成员(包括私有的)

若想要在内部类中通过对象.调用外部类成员
外部类.this.外部类成员

内部类存在后,源代码进行编译,产生一个字节码文件
Demo$InnerDemo.class

Demo.java

package innerclass;

public class Demo {
    private String name = "这是正常类的属性";
    public void testDemo(){
        System.out.println("这是正常类的方法");
    }
    public class InnerDemo{
        private String name = "我是内部类的属性";
        public void testInnerDemo(){
            System.out.println("我是成员内部类方法" + Demo.this.name);//调用正常类属性
            testDemo();
        }
    }
}

TestMain.java

package innerclass;

public class TestMain {
    public static void main(String[] args){
        //内部类相当于外部类的一个成员,需要外部类对象才能操作
        //创建内部类对象-----构建内部类的方法
        Demo demo = new Demo();
        Demo.InnerDemo innerDemo = demo.new InnerDemo();
        //调用内部类方法
        innerDemo.testInnerDemo();
    }
}

局部内部类

将一个类定义在方法或者块里,作为成员的内部结构,与局部变量一个层次
局部内部类像一个局部变量一样不能用public、protected、private及static修饰,只能用abstract、final修饰

不同方法中两个内部类名字可以相同
局部内部类字节码命名规则
Demo$1InnerTestMethod、Demo$2InnerTestMethod
使用内部的变量要用final修饰

匿名内部类:成员匿名内部类、局部匿名内部类

public interface Test{
	public void test(){}
}
//public class Son implements Test{
//	public void test(){}
//}
Test test = new Test(){
	public void test(){
	
	}
};

通常接口或者抽象类的具体子类这样写
可以省略一个类文件,所以开发中比较常见
只有类的结构体,没有类的所有结构,自然也没有构造方法
不能用任何修饰符修饰

静态内部类

成员静态内部类
不需要外部类对象,通过正常的内部类直接创建对象
不能访问非静态成员(内部、外部)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值