这期内容当中小编将会给大家带来有关java中的内部类内部接口的使用方法说明,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强>内部类强>
先讲内部类,内部类就是在类中定义的类,类中的类可以看做是类的一个属性,一个属性可以是静态也可以是非静态的。而内部类也可以定义在类的方法中,再加上匿名类,总共有5种内部类。
<强>静态内部类强>
我们在类内部定义一个静态的类,如下所示:
@Slf4j 公开课StaticInnerClass { 内部静态类{ 无效的print () { log.info(“内部类是:“+); } } 公共静态void main (String [] args) { StaticInnerClass。内内=new StaticInnerClass.Inner (); inner.print (); } }
因为静态变量可以直接根据类名来存取,所以我们使用新StaticInnerClass.Inner()来实例化内部类。
<强>非静态内部类强>
类中定义的类也可以是非静态的,如下所示:
@Slf4j 公开课InnerClass { 类内部{ 无效的print () { log.info(“内部类是:“+); } } 公共静态void main (String [] args) { InnerClass。内内=new InnerClass ()。新的内部(); inner.print (); } }
要访问到类的变量,需要实例化外部内,然后再实例化内部类:新InnerClass ()。新的内部().
注意这里我们需要使用到两个新的。
<强>静态方法内部类强>
我们可以在静态方法中定义一个类,这个类其实就相当于方法中的变量,这个变量当然不能是静态的。我们看下面的例子:
@Slf4j 公开课StaticMethodInnerClass { 私有静态字符串x=熬蔡瑇"; 公共静态孔隙print () { 类MyInner { 公共空间打印(){ log.info (“x是”;+ x); } } 新MyInner MyInner i=(); i.printOuter (); } 公共静态void main (String [] args) { StaticMethodInnerClass.print (); } }
方法中的类,我们是无法在外部实例化的。
<强>非静态方法的内部类强>
同样的非静态方法也可以定义内部类:
@Slf4j 公开课MethodInnerClass { 私人字符串x=胺蔷蔡瑇"; 公共空间print () { 类MyInner { 公共空间打印(){ log.info (“x是”;+ x); } } 新MyInner MyInner i=(); i.printOuter (); } 公共静态void main (String [] args) { 新的MethodInnerClass () .print (); } }
注意,这里需要先实例化外部类才可以继续调用。
<强>匿名类强>
最后一个,匿名类,直接在需要的时候实例化的类。匿名类我们遇到了很多次了,比如在构建SortedSet的时候,可以传入自定义的比较器,我们可以用匿名类来实现,也可以直接使用λ表达式。
公共类AnonymousClass { 公共静态void main (String [] args) { SortedSet sortedSet1=new ConcurrentSkipListSet(新比较器(){ @Override 公共int比较(o1,对象o2) { 返回0; } }); SortedSet sortedSet2=new ConcurrentSkipListSet ((o1、o2)→0); } }
<>强内部接口强>
内部接口是指在接口中定义的接口。最常见的就是中映射的输入了:
公共接口Map{ 接口Entry { K getKey (); }
这里的内部接口一定是静态的,因为接口是不能实例化的,所以为了访问到接口中的接口,必须定义为静态的。如果不指定,则默认就是静态的。
我们看一个该内部接口的实现:
java中的内部类内部接口的使用方法说明