zoukankan      html  css  js  c++  java
  • Java

    内部类: 所谓内部类就是在一个类内部进行其他类结构的嵌套操作(可以理解为将一个类定义在另一个类的内部)。

    内部类可以定义在类的内部(与类成员层次一致),也可以定义在块、方法的内部(与类成员相差一个层次,与方法的局部变量在一个层次)

    内部类的优点:

    •  内部类与外部类可以方便的访问彼此的私有域(比如私有方法、私有属性);
    •  内部类是另外一种封装,对外部的其他类隐藏;
    •  内部类可以实现Java的单继承局限。

    1.成员内部类

      将一个类直接定义在类里,作为成员,与属性或方法层次一致;

      成员内部类与正常类一样可以使用不同的修饰符来修饰;

        好处:

            省略了一个.java文件;

            成员内部类中可以访问外部类中的所有成员,包括私有的;

      若想要在内部类中通过对象.调用外部类成员:  

            外部类.this.外部类成员;

      内部类存在后,源代码进行编译,会产生一个字节码: Demo$InnerDemo.class

     

    2.局部内部类

      将一个类定义在方法、块中,作为成员的内部结构,与临时的局部变量一个层次;

      局部内部类像一个局部的变量一样,不能用public、protected、private、static,只能使用abstract或final。

      局部内部类命名规则Demo$1InnerTestMethod   Demo$2InnerTestMethod
         局部内部类使用的变量只能是final修饰

       

    *3.匿名内部类
        成员匿名内部类

        局部匿名内部类
        public interfase Test{
           public void test();
        }
        Test t = new Test(){
           public void test(){
         }
        };
        通常接口或抽象类的具体子类这样写
        开发中为了省略一个类文件   上述写法比较常见
        匿名内部类很特殊 只有类体 没有类的所有结构( 修饰符 名字 继承 实现)
        不能用任何修饰符来修饰  匿名内部类也没有构造方法
        Swing  做一个按钮 绑定一个事件监听器
     4.静态内部类
        成员静态内部类
        不需要外部类对象,通过正常的方式直接创建内部类
        静态元素不能访问非静态成员(自己类和外部类)

     
    package innerclass;
    
    public class Demo {
        private String name = "这是正常类中的属性";
        public void testDemo(){
            System.out.println("这是正常类中的方法");
        }
    
        //成员内部类
        public class InnerDemo{
            private String name="我是成员内部类的属性";
            public void testInnerDemo(){
                //可以访问外部类的private或静态元素,当和外部类冲突时,直接引用属性名,是内部类的成员属性
                System.out.println("我是成员内部类的方法:"+this.name);
            //当和外部类属性名重叠时,可通过外部类名.this.属性名
            System.out.println("我是成员内部类的方法:"+Demo.this.name);
    //外部类名+this+外部类成员 Demo.this.testDemo(); } } public void testDemoOne(){ String s = ""; //局部内部类 不能使用public protected private static class InnerTestMethod{ } } private static class InnerDemoStatic{ } } package innerclass; import innerclass.Demo.InnerDemo; public class Test { public static void main(String[] args){ //内部类属于外部类的(相当于是一个成员) 需要外部类对象才能操作 //创建内部类的对象---调用内部类的方法 Demo demo = new Demo(); InnerDemo innerDemo = demo.new InnerDemo(); innerDemo.testInnerDemo(); } }
  • 相关阅读:
    celery的使用
    DOM操作
    js动画
    列表案例
    背景案例
    背景属性连写
    背景属性
    链接导航案例
    链接伪类
    优先权之权重会叠加
  • 原文地址:https://www.cnblogs.com/yyanghang/p/11160567.html
Copyright © 2011-2022 走看看