>>交流分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  视频课程  卫琴专栏  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 10707 个阅读者 刷新本主题
 * 贴子主题:  内部类的种类和用法 回复文章 点赞(0)  收藏  
作者:Jacky    发表时间:2020-03-30 20:34:27     消息  查看  搜索  好友  邮件  复制  引用

                  
    在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。

1.内部类的分类

成员内部类(静态和非静态)和局部内部类(方法内、代码块内、构造器内)

2.成员内部类的理解

一方面,作为外部类的成员:

      >调用外部类的结构
   >可以被static修饰
   >可以被4种不同的权限修饰

     另一方面,作为一个类:

        > 类内可以定义属性、方法、构造器等
   > 可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承
   > 可以被abstract修饰

特点:

  • 成员内部类可以无条件的访问外部类的所有的成员属性和方法不受 private 和 static影响
  • 当内部类的成员属性或者方法与外部类的同名时,会发生隐藏现象。直接在内部类中调用的是内部类的成员属性和方法。需要用 “外部类”.this.成员变量/成员方法
  • 如果外部类需要访问内部类,需要生成内部对象,才能访问内部类对象。
  • 成员内部类是依附外部类存在的,如果需要访问成员内部类,那么一定需要先创建外部类。
  •   由于成员内部类的以为外部类的成员的方式存在,所以类修饰可以用 private public protect 无权限的修饰符修饰来表示内部的访问权限的问题。而外部内不可以。
public  class  test {
     public  static  void  main(String[] args) {
         // 创建静态的成员内部类的对象
        Person.Inner2 inner2 =  new  Person.Inner2();

         // 创建非静态的成员内部类的对象
        Person p =  new  Person();
        Person.Inner1 inner1 = p. new  Inner1();
        inner1.show(); // name = 小张, age = 23
        inner2.show(); // 静态成员内部类
     }
}

class  Person{
    String name;
     int  age;

     // 非静态成员内部类
     class  Inner1{
         public  void  show(){
            name = "小张" ;
            age = 23 ;
            System.out.println("name = " + name + ", age = "+  age);
        }
    }

     // 静态成员内部类
     static  class  Inner2{
         public  void  show(){
            System.out.println("静态成员内部类" );
        }
    }

     public  void  eat(){
        System.out.println("人吃饭" );
    }
}

3.如何在成员内部类中调用外部类的结构?

  class  Person{
    String name = "小明" ;
    public  void  eat(){
    }

    // 非静态成员内部类
     class  Bird{
        String name = "杜鹃" ;
         public  void  display(String name){
            System.out.println(name); // 方法的形参
            System.out.println( this.name); // 内部类的属性
            System.out.println(Person. this.name); // 外部类的属性
         // Person.this.eat();
         }
    }
}

4.局部内部类

特点:

  • 不能用访问权限修饰符关键字
  • 作用区间只在申明的局部内

  5.匿名内部类

特点:

  • 匿名内部类不能使用 static 和权限修饰符
  • 匿名内部没有构造器。通过new XXX 的生成一个对象引用。
  • 匿名内部类属于局部内部类,所有局部内部类限制的条件在匿名内部中依然有效
     ----------------------------
原文链接:https://www.cnblogs.com/897463196-a/p/12596162.html

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-30 20:34:27 重新编辑]
  Java面向对象编程-->Lambda表达式
  JavaWeb开发-->JSP技术详解(Ⅱ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->用Swing组件展示HTML文档
  精通Spring-->面向对象开发方法概述之开发思想(上)
  Vue3开发-->创建RESTFul风格的Web应用
  10道Java编程基础练习题
  Java设计模式: 里氏替换原则和合成复用原则详解
  Java如何遍历Enumeration
  观察者模式和发布订阅模式的区别
  搞定这24道JVM面试题,要价30k都有底气
  购书咨询
  使用 RocketMQ 事务消息,实现分布事务
  小数在内存中是如何存储的?
  Java注解的定义和使用
  java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍
  5个非常有挑战性的Java面试题
  Java入门实用代码: 队列(Queue)用法
  Java 入门实用代码:获取文件大小
  Java入门实用代码:字符串优化测试
  Java中用动态代理实现标准的DataSource数据源连接池
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。