博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内部类
阅读量:7120 次
发布时间:2019-06-28

本文共 2567 字,大约阅读时间需要 8 分钟。

1、实例内部类

1.1在外部类的静态方法和外部类以外的其他类中,必须通过外部类的实例创建内部类的实例。

public class Outer {    //实例内部类    class Inner1{            }    Inner1 i=new Inner1();    public void methord(){        Inner1 ii=new Inner1();    }    public static void methord1(){        Inner1 i=new Outer().new Inner1();//需要创建外部类实例    }    }

1.2在实例内部类中可以访问外部类的所有成员,,多层嵌套也可以

1.3外部类不能直接去访问内部类的成员,必须通过内部类的实例去访问。

1.4if类A包含类B,类B 包含类C,则A不能直接访问C,而应该通过类B的实例去访问C。

1.5 外部类实例与内部类实例是一对多的关系,也就是说一个内部类实例志对应一个外部类实例,而一个外部类实例则可以对应多个内部类实例。

1.6如果实例内部类B与外部类A包含有同名的成员t,则在类B中:t和this.t都表示B中的成员t;A.this.t表示A中的成员t。

1.7在实例内部类中不能定义static成员,除非同事哟final和static修饰。

2.静态内部类

2.1在创建静态内部类的实例时,不需要创建外部类的实例。Outer.Inner1 i=new Outer.new Inner1();

2.2静态内部类中可以定义静态成员和实例成员

2.3外部类以外的其他类需要通过完整的类名访问静态内部类中的静态成员,如果要访问静态内部类中的实例成员,则需要通过静态内部类的实例。

public class Outer {        static int h;       int k;        //实例内部类        class Inner1{                    }        Inner1 i=new Inner1();        public void methord(){            Inner1 ii=new Inner1();        }        public static void methord1(){            Inner1 i=new Outer().new Inner1();//需要创建外部类实例        }        static class Inner{
       Outer outer=new Outer();        int hh=outer.k; int a=0; static int b=0; int g=h;//静态内部类可以直接访问外部类的静态成员 } } class OtherClass{ Outer.Inner i=new Outer.Inner(); int b=i.a; int c=Outer.Inner.b; }

 3.局部内部类(指在一个方法中定义的内部类)

3.1局部内部类与局部变量一样,不能使用访问控制修饰符(public.private/protected/static)

3.2局部内部类只在当前方法有效。

3.2.1局部内部类中不能定义static成员

3.2.2在局部内部类中可以访问外部类的所有成员

3.2.3在局部内部类中志可以访问当前方法中final类型的参数与变量。如果方法中的成员与外部类中的成员同名,则可以使用《OuterClaaName》.this.<MenberName>的形式访问外部类中的成员。

4.匿名类

指没有类名的内部类,必须在创建时使用new语句来声明类。

public class Outer {        static int h;        //实例内部类        class Inner1{                    }        Inner1 i=new Inner1();        public void methord(){            Inner1 ii=new Inner1();        }        public static void methord1(){            Inner1 i=new Outer().new Inner1();//需要创建外部类实例        }        static class Inner{            int a=0;            static int b=0;            int g=h;//静态内部类可以直接访问外部类的静态成员        }    }    class OtherClass{        Outer.Inner i=new Outer.Inner();        int b=i.a;        int c=Outer.Inner.b;        private void show(){            Outer anonyInter=new Outer(){                void show(){                    System.out.println("这是匿名类中的show方法");                }            };        }    }

4.1匿名类和局部内部类一样,可以访问外部类中的所有成员。如果匿名类喂鱼一个方法中,则匿名类只能访问方法中final类型的局部变量和参数。

4.2匿名类中允许使用费静态代码块进行成员初始化操作。非静态代码块会在父类的构造方法之后被执行。

 

转载于:https://www.cnblogs.com/tjlgdx/p/6145101.html

你可能感兴趣的文章
RH413-Linux系统下umask测试
查看>>
MYSQLmy-innodb-heavy-4G.cnf配置文件注解
查看>>
HTML5 Audio/Video 标签,属性,方法,事件汇总
查看>>
Android 学习笔记【基础扫盲篇】
查看>>
shiro filter
查看>>
重新排列数字使其刚好比当前值大 Next Greater Element III
查看>>
tomcat虚拟子目录设置
查看>>
C++中sizeof详解
查看>>
elasticsearch集群部署
查看>>
我的友情链接
查看>>
Exchange 2010 OWA更改过期密码
查看>>
我的友情链接
查看>>
Programming in Scala (Second Edition) 读书笔记12 Trais
查看>>
国内首家VR虚拟现实主题公园即将在北京推出
查看>>
建设工程安全生产管理条例
查看>>
python 微信公众号-回调模式验证url
查看>>
适合Web服务器的iptables规则
查看>>
如何安装和配置打印服务器之一:安装打印服务器
查看>>
Centos 7上启动 vsftp报错处理
查看>>
我的友情链接
查看>>