这期内容当中小编将会给大家带来有关教你如何正确的使用java内部类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强> 1。什么是内部类强>
定义在类内部的类,称之为内部类
公共类{ 在就类{//此时是内部类 } }
<强> 2。为什么要使用内部类及# 63;强>
<强> 3。内部类的分类强>
对于内部类的分类,可以对比于成员变量的分类。
我们可以根据不同的修饰符或者定义的不同位置把成员变量,可以细分为:类成员变量,实例成员变量,局部变量。
内部类看做是外部类的一个成员,那么内部类可以使用公共/缺?保护/私修饰。还可以是静态修饰。
同理,内部类也根据使用不同的修饰符或者定义的不同位置,将其分成4类:
//外部类 类从{//实例内部类:没有使用静态修饰 类内部{ } } 公开课InnerDemo1 { 公共静态void main (String [] args) {//创建实例内部类,没有使用静态修饰,属于外部类的对象,因此,创建实例内部类前,必须存在外部类对象 出=新出();//通过外部类对象创建内部类对象 出。内心在=P碌哪诓?); } }
。由创建实例内部类的过程可知,当存在内部类对象时,一定存在外部类对象。
b。实例内部类的实例自动持有外部类的实例的引用,实例内部类可以无条件访问外部类的所有字段和方法
注意:当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象
c。外部类中不能直接访问内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问
//外部类 类从{ 私人字符串名称=皁ut"; 私人整数年龄=17;//实例内部类:没有使用静态修饰 类内部{ 私人整数年龄=18;//隐藏现象,隐藏了外部类的年龄 内部(){//特点:1 .实例内部类能直接访问外部类成员//2 .当实例内部类和外部类有同名的字段或者方法时,会发生隐藏现象 system . out。println(名字+ this.age);//输出out18//此时若需要使用外部类的年龄,语法:外部类.this.age System.out.println (Outter.this.age);//输出17 } } }
总结:简单来说,就是看变量的作用域,外部类成员变量的作用域是整个外部类,而内部类在外部类中(可以看做外部类的字段),内部类自然就可以访问外部类。而外部类要去访问内部类的成员,可以这样理解:内部类的成员属于内部类,在内部类中有效,内部类都不存在,其中的成员变量也不会存在,所以,外部类中不能直接访问内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。
<强> 强>
<强> 强>
//外部类 类从{//静态内部类:使用静态修饰 内部静态类{ } } 公开课InnerDemo2 { 公共静态void main (String [] args) {//因为静态内部类属于外部类本身,可以直接通过外部类类名来访问(类比字段) 出。内心在新Outter.Inner=(); } }
。在创建内部类的实例时,不必创建外部类的实例。
b。静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员,必须通过外部类的实例去访问。
简单理解:静态成员属于类,非静态成员属于对象,如果要访问外部类的实例成员(非静态成员),当然要先存着外部类对象的。而静态内部类的创建是不需要外部类的对象,因此,如果访问外部类的实例成员,必须通过外部类的实例去访问。
c。在静态内部类中可以定义静态成员和实例成员。
d。测试类可以通过完整的类名直接访问静态内部类的静态成员。
//外部类 类从{ 静态字符串名称=皁utter"; 公共整数年龄=17;//静态内部类:使用静态修饰 内部静态类{ 内部(){//静态内部类能直接访问外部类的静态成员 System.out.println(名字);//输出了//访问外部类的实例成员,必须通过外部类的实例去访问。 system . out。println(新出().age);//输出17 } } }
注意,局部内部类和方法里面的局部变量一样,是不能有公众保护,私人以及静态修饰符的。
公共类InnerDemo3 { 公共静态void main (String [] args) {//局部内部类 类内部{ } } }教你如何正确的使用java内部类