Java - 内部类 July 9,2019

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

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

内部类的优点:

  •  内部类与外部类可以方便的访问彼此的私有域(比如私有方法、私有属性);
  •  内部类是另外一种封装,对外部的其他类隐藏;
  •  内部类可以实现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(); } }

 

posted @ 2019-07-09 21:23  亿贫如洗杨道长  阅读(21)  评论(0)    收藏  举报