学生视角带你了解Java内部类

网友投稿 370 2022-08-23


学生视角带你了解Java内部类

目录一、内部类介绍二、成员内部类:1、非静态内部类2、静态内部类二、局部内部类:2、有名的局部内部类1、匿名局部内部类(重要)

一、内部类介绍

1.定义:一个类内部又嵌套了一个类,被嵌套的类就是内部类(inner class),嵌套其他类的称为外部类(outer class)。内部类是类的五大成员之一(属性、 方法、构造器、代码块、内部类)。

分类:

二、成员内部类:

1、非静态内部类

说明:定义在成员位置中(方法或代码块外面),无static修饰。

1.可以直接访问外部类的所有的成员

2.可以 添加任意权限修饰符

3.作用域,和其他成员一样作用在整个外部类

package local_class;

public class localclass {//外部类

//属性位置

private int n1=10;

class localN1{//局部类

public void output(){

//==1==.可以直接访问外部类的所有的成员,包括私有

System.out.println("获取私有成员"+n1);

}

}

//写一个方法来创建局部类的一个实列

public void output(){

localN1 LocalN1 = new localN1();

LocalN1.output();

}

}

实现http://:

2、静态内部类

**说明:**定义在成员位置中(方法或代码块外面),有或无static修饰。

1.可以直接访问外部类的静态的成员,不能访问非静态成员。

2.可以 添加任意权限修饰符

3.作用域,和其他成员一样作用在整个外部类

代码:

package local_class;

public class _static_localclass {//外部类

private int n1=10;

static int n2=20;

static public class localN2{//静态局部类

public void output(){

//==1==.可以直接访问外部类的所有的成员,包括私有

System.out.println("获取_static_localclass私有成员"+n2);

//System.out.println(n1);

}

}

//写一个方法来创建局部类的一个实列

public void output(){

localN2 LocalN2 = new localN2();

LocalN2.output();

SBgDxlf}

}

成员内部类:用法比较简单。

二、局部内部类:

说明:局部类是定义在外部类的方法内或者代码块内。

1.可以直接访问外部类的所有的成员。

2.不能添加访问修饰符,局部内部类的地位就是一个局部变量(所以可以用fianl修饰)。

3.作用域:作用在所定义的方法中或者代码块中。

4.访问方式:局部内部类访问外部外部类成员可以直接访问。外部类访问局部内部类,在外部类作用域内先创建对象再访问。

5.外部其他类不能访问内部类。

6.外部类成员与内部类成员重名时,默认就近原则,如果想用外部类的话可以使用:外部类名.this.成员 。

例如:

2、有名的局部内部类

错误代码

正确代码

package _inner_class;

public class Named_local_inner_class {//外部类

private int a1=1;

int a2=2;

private void fun(){

System.out.println("输出了私有方法");

}

//第一种情况,在方法中

//第二种情况,在代码块中(我就不打代码了和在方法中一样的)

//此处以方法中为例。

public void output(){//方法

class inner_class{//局部内部类

//1.可以访问外部类的所有成员

public void _output(){

System.out.println("a1="+a1);//访问的私有成员

System.out.println("a2="+a2);

fun();

}

}

//只需要实例化就行了,然后调用这个 output()方法。

//注意作用域

inner_class Inner_class=new inner_class();

Inner_class._output();

}//结束方法

}//外部类

调用

1、匿名局部内部类(重要)

1.本质还是一个内部类 就是一个类,该类没有名字(其实有名字,只是我们看不见,系统分配)。

2.同时还是一个对象。 基本语法

new 类名或接口名(参数列表){

类体

};

调用匿名内部类:

输出

和有名的局部内部类的区分

1.A22对象只使用一次,以后不再使用时用匿名局部内部类。

2.A22的编译类型和运行类型是什么?(运行类型其实就是匿名局部内部类,就是XXXXX.外部类名$1)

如图:

最佳实践:当作参数直接传递,简介高效。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python将图片的18k的大小变大(Python图片大小)
下一篇:Python gevent bad argument to internal function解決辦法 3.7 版本(python基础教程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~