0


Java中内部类的区分

内部类分为三个:

实例内部类

1.实例化内部类中的方法可以直接使用外部类的实例变量和实例方法。在常规内部类中可以直接用内部类创建对象。
2.如何实例化内部类对象;
*外部类名.内部类名 变量 = 外部类对象的引用.new InnerClass();

  • 实例内部类当中不能定义静态的成员变量?方法中也不能用静态的!!!!
  • public static final int data6 = 30;常量 -》 编译的时候 就确定了这个值 是几了
  • 3.实例内部中如果,如果有成员变量和外部类的成员变量重名了?怎么办?
  • 优先使用自己的。
  • 如何拿到外部类的值呢?
  • System.out.println("->>>" + OuterClass.this.data1);外部类的值调用
  • System.out.println("&&&&&&&" + this.data1);内部类的值调用
  • 意识到了:实例内部中不仅有自己的this 而且包含了 外部类的this
  • 4代码图如下:
classInnerClass{publicint data1 =10000;publicint data4 =10;privateint data5 =20;publicstaticfinalint data6 =30;publicInnerClass(){System.out.println("InnerClass的构造方法");}publicvoidmethod(){System.out.println("&&&&&&&"+this.data1);System.out.println("->>>"+OuterClass.this.data1);System.out.println(data2);System.out.println(data3);System.out.println(data4);System.out.println(data5);System.out.println(data6);System.out.println("InnerClass的一个方法!");}}}publicclassTextDemo{publicstaticvoidmain(String[] args){OuterClass outerClass =newOuterClass();OuterClass.InnerClass innerClass = outerClass.newInnerClass();
        innerClass.method();}publicstaticvoidmain1(String[] args){OuterClass outerClass =newOuterClass();System.out.println(outerClass.data1);//外部类名.内部类名  变量 = 外部类对象的引用.new InnerClass();OuterClass.InnerClass innerClass = outerClass.newInnerClass();//一步到位版本!OuterClass.InnerClass innerClass1 =newOuterClass().newInnerClass();//new OuterClass() : 匿名对象:一般使用在只用一次的时候System.out.println(newOuterClass().data1);}}

小编想说一下局部内部类是定义在方法里面的,但是这个基本没人用,所以我就不详细姐说了。

静态内部类

1.静态内部类:与类的其他成员相似,可以用static修饰内部类,这样的类称为静态内部类。静态内部类与静态内部方法相似,只能访问外部类的static成员,不能直接访问外部类的实例变量,与实例方法,只有通过对象引用才能访问。
2.由于static内部类不具有任何对外部类实例的引用,因此static内部类中不能使用this关键字来访问外部类中的实例成员,但是可以访问外部类中的static成员。这与一般类的static方法相通。
/**

  • 静态内部类当中的一些问题
  • 1.如何实现实例化静态内部对象?
  • OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();
  • 2.在静态内部类当中 只能访问外部类的静态的成员。
  • 问题:如果要访问外部类的非静态成员 那么怎么访问? 提供外部类对象 OuterClass out = new OuterClass();
  • 或者: OuterClass out ;
  • InnerClass(OuterClass out){
  • this.out = out;
  • System.out.println(“静态内部类的构造”);
  • }

*/

classOuterClass2{publicint data1 =10;privateint data2 =20;publicstaticint data3 =30;publicvoidmethod(){System.out.println("OuterClass::method");}/**
    * 静态内部类当中的一些问题
     * 1.如何实现实例化静态内部对象?
     *       OuterClass2.InnerClass innerClass = new OuterClass2.InnerClass();
     * 2.在静态内部类当中 只能访问外部类的静态的成员。
     * 问题:如果要访问外部类的非静态成员 那么怎么访问? 提供外部类对象 OuterClass out = new OuterClass();
     *  或者:  OuterClass out ;
     *  InnerClass(OuterClass out){
     *             this.out = out;
     *             System.out.println("静态内部类的构造");
     *         }
     */staticclassInnerClass{publicint data4 =40;privateint data5 =50;publicstaticint data6 =60;//OuterClass out = new OuterClass();OuterClass2 out ;InnerClass(){System.out.println("静态内部类的构造");}InnerClass(OuterClass2 out){this.out = out;System.out.println("静态内部类的构造");}publicvoidmethod(){System.out.println(out.data1);System.out.println(out.data2);System.out.println(data3);System.out.println(data4);System.out.println(data5);System.out.println(data6);System.out.println("InnerClass的方法method");}}}publicclassTestDemo2{publicstaticvoidmain(String[] args){//不要外部类对象 所以 静态内部类使用的场景会多。OuterClass2.InnerClass innerClass =newOuterClass2.InnerClass(newOuterClass2());
      innerClass.method();}}

匿名内部类

匿名内部类在java编码中不是很常见,它可一让类实现多个继承的特性。
举个例子

classText{publicint a =10;publicvoidtext(){System.out.println("text()!");}}publicclassTextDemo3{publicstaticvoidmain(String[] args){//new Text() //没带大括号就是一个匿名对象newText(){//带了大括号就是一个匿名内部类}.text();}}

本文转载自: https://blog.csdn.net/WRYSNB/article/details/123880265
版权归原作者 不爱写程序的运动员 所有, 如有侵权,请联系我们删除。

“Java中内部类的区分”的评论:

还没有评论