首页 > 其他分享 >内部类

内部类

时间:2023-10-20 23:13:38浏览次数:24  
标签:Outer 内部 对象 Inner new public

内部类

写在一个类里面的类叫做内部类

内部类的分类

成员内部类/静态内部类/局部内部类/匿名内部类

成员内部类

写在成员位置的,属于外部类的成员。

成员内部类可以被一些修饰符所修饰,比如:private,默认,protected,public,static等。

在成员内部类中,JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量。

public class Outer {
    String name;
    Private class Inner{
        
    }
    //因为Inner用private修饰,故需要提供给其他类创建对象的方法,用getInstance获取Inner对象给使用者
    public Inner getInstance(){
        return new Inner();
    }
}
public class test{
    public static void main(String Args[]){
        Outer o = new Outer();
        /*由于private修饰,所以不能使用Inner.oi去获取getInstance返回的对象,可以使用其父类object(超类)来接收*/
        object oi = o.getInstance();//$符号供内部类使用
        System.out.println(oi);//Outer$Inner@4eec7777
        //outer.Inner oi = new OUter().new Inner();
        //System.out.println(Outer.this.变量名);
    }
}

/内部类的堆内存中会自动生成一个“父类名.this”去记录外部类的地址/

静态内部类

静态内部类是一种特殊的成员内部类。

静态内部类只能访问外部类中的静态变量和静态方法,如果想访问非静态的需要创建外部类的对象。

创建静态内部类对象的格式:外部类名 对象名=new 外部类名.内部类名()

//new出来的对象是Inner的对象
Outer.Inner oi = new Outer.Inner();

调用非静态方法的格式:先创建对象,用对象调用

调用静态方法的格式:外部类名.内部类.方法名();

局部内部类

将内部类定义在方法里面就叫做局部内部类,类似与方法里面的局部变量。局部内部类和局部变量一样,都不能使用public,static,protected等修饰符修饰

外界是无法直接使用,需要在方法内创建局部内部类的对象并使用。

该类可以直接访问外部类的成员,也可以访问方法内的局部变量。

pubolic class Outer{
    public void show(){
        int a = 10; 
    }
    //局部内部类
    class Inner{
        String name;
        int age;
        public void method1(){
            System.out.println("局部内部类中的method1方法");
        }       
        public static void method2(){
            System.out.println("局部内部类中的method2静态方法");
        }
    }
    //创建局部内部类的对象
    Inner i = new Inner();
    System.out.println(i.name);
    System.out.println(i.age);
    i.method1();
    Inner.method2();
}
匿名内部类(常用且重要)

匿名内部类本质上就是隐藏了名字的内部类(继承/实现、方法重写、创建对象)

example:
	//new 类名或者接口名
	new Inner() {
        //需要重写方法
        public void show() {
        }
    };//注意大括号末尾有一个分号

匿名内部类可以写在成员位置,也可以写在局部位置

匿名内部类格式的细节:1,包含了继承或实现,方法重写,创建对象。2,整体就是一个类的子类对象或者接口的实现类对象。

使用场景:当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以用匿名内部类简化代码。

很牛逼QAQ

// Today is not easy, tomorrow is more difficult, but the day after tomorrow will be wonderful.

标签:Outer,内部,对象,Inner,new,public
From: https://www.cnblogs.com/tenset/p/17778213.html

相关文章

  • 01内部类
    内部类一、内部类的分类成员内部类静态内部类(static)局部内部类:类在方法的内部匿名内部类二、内部类的概念(什么是内部类?)在一个类的内部再定义一个完整的类classOuter{classInner{}}三、内部类的特点编译之后可生成独立的字节码文件内部类......
  • Java拾贝第六天——匿名内部类
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么匿名内部类匿名对象没忘吧?newPerson();//语法同匿名内部类匿名内部类就是匿名的局部内部类,地位同局部变量。有两种形式:基于接口的匿名内部类,基于类的匿名内部类基于接口的匿名内部类常规方式实现接口并重写其方法publ......
  • Java拾贝第五天——内部类
    Java拾贝不建议作为0基础学习,都是本人想到什么写什么内部类在类中可以定义成员变量和方法,而且还可以定义一个类。一般内部类分为四种:成员内部类、局部内部类、静态内部类、匿名内部类。成员内部类成员内部类就好像成员变量一样,定义在类的内部。classOut{privateint......
  • 软件测试|解决‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
    前言很多Python初学者在使用Python时,会遇到环境的问题,比如无法使用pip命令安装第三方库的问题,如下图:当出现错误信息"'pip'不是内部或外部命令,也不是可运行的程序或批处理文件"时,这通常意味着在命令行中输入pip命令时,系统无法找到pip可执行文件的位置。本文将介绍解决这个问......
  • 内部类
    内部类写在一个类里面的类叫做内部类内部类的分类成员内部类/静态内部类/局部内部类/匿名内部类成员内部类写在成员位置的,属于外部类的成员。成员内部类可以被一些修饰符所修饰,比如:private,默认,protected,public,static等。在成员内部类中,JDK16之前不能定义静态变量,JDK16开始......
  • Java内部类进行回调的场合和范例
    大力:“内部类回调外部类的实现,是咋回事?”卫琴:“回调实质上是指一个外部类尽管实际上实现了某种功能,但是没有直接提供相应的接口,客户类可以通过这个外部类的内部类的接口来获得这种功能。而这个内部类本身并没有提供真正的实现,仅仅调用外部类的实现。可见,回调充分发挥了内部类具有访......
  • 威纶通触摸屏如何用内部地址做配方
    一般威纶通触摸屏我们都是用配方数据库来做配方,可有些触摸屏型号是不支持配方功能的,或者你觉得用软件的配方检视窗口做出来的画面不好看,这时候我们就可以用内部地址来做配方了,这里以一个配方5个数据为例给大家演示一遍。 步骤一:新建数值输入元件,选择RW内部地址再加上索引寄......
  • 成员内部类
    packagecom_black.InnerClass.s1;publicclassOuter{privateints=10;/*publicclassInner{publicvoidshow(){System.out.println(s);*/privateclassInner{publicvoidshow(){System.out.print......
  • VTK 判断一个 点 是否在一个模型 stl 内部 vtk 点是否在内部 表面 寻找最近点
    判断一个点,判断是否在风格stl模型内部,或表面:目录1.方案一:使用vtkCellLocator  FindClosestPoint找到模型上距离给定点最近的一点,计算两点的距离,小于某一阈值则认为此点在模型上;2.方案二使用vtkKdTreePointLocator3.方案三使用vtkSelectEnclosedPoints1.方案一:使用vtk......
  • np.array强制内部元素格式统一
    df_test=pd.DataFrame(data=np.array([np.repeat(['class'+str(i+1)foriinrange(2)],10),list(range(10,0,-1))*2,list(range(1,11))*2]).T,columns=['class']+['x'+str(i+1)for......