`

内部类使用总结(参考白度文献上的文章)

 
阅读更多
我是一个java基础不太好的人,现在绝大多数人都是利用自己的java知识涉足android,而我发觉我自己是在利用android学习java:
所以在下班待在家的时候进一步棍固自己惨兮兮的java:
下面要写的是对java内部类学习的部分,希望写在这里跟大家一起分享:

1.定义:放在一个类的内部的类我们就叫内部类

2.作用:
   1.内部类可以很好的实现隐藏
     一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
   2.内部类拥有外围类的所有元素的访问权限
   3.可是间接实现多重继承
   4.可以避免修改接口而实现同一个类中两种同名方法的调用。

3.实现隐藏
   平时我们对类的访问权限,都是通过类前面的访问修饰符来限制的,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以,所以我们能通过内部类来隐藏我们的信息。可以看下面的例子
接口
package com.edison;
 
public interface Incrementable
{
 void increment();
}


具体类:
package com.edison;
 
public class Example {
   
    private class InsideClass implements InterfaceTest
    {
         public void test()
         {
             System.out.println("这是一个测试");
         }
    }
    public InterfaceTest getIn()
    {
        return new InsideClass();
    }
}

上面InsideClass是内部类,访问修饰符是private

客户端程序
package com.edison;
 
public class TestExample {
 
 public static void main(String args[])
 {
    Example a=new Example();
    InterfaceTest a1=a.getIn();
    a1.test();
 }
}

    从这段代码里面我只知道Example的getIn()方法能返回一个InterfaceTest 实例但我并不知道这个实例是这么实现的。而且由于InsideClass 是private的,所以我们如果不看代码的话根本看不到这个具体类的名字,所以说它可以很好的实现隐藏。

2.可以无条件地访问外围类的所有元素
package com.edison;
 
public class TagBean {
 
 private String name="edison";
   private class InTest
   {
      public InTest()
      {
          System.out.println(name);
      }
   }
   public void test()
   {
    new InTest();
   }
   public static void main(String args[])
   {
       TagBean bb=new TagBean();
       bb.test();
   }
}

    从上面类中name这个变量是在TagBean里面定义的私有变量。这个变量在内部类中可以无条件地访问System.out.println(name);

3.可以实现多重继承
    个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类。大家看下面的例子。

类一
 
package com.edison;
 
public class Example1 {
 
   public String name()
   {
       return "liutao";
   }
}

类二
package com.edison;
 
public class Example2 {
 
    public int age()
    {
        return 25;
    }
}


类三
 
package com.edison;
 
public class MainExample 
{
   private class test1 extends Example1 
    {
        public String name()
        {
          return super.name();
        }
    }
    private class test2 extends Example2
    {
       public int age()
       {
         return super.age();
       }
    }
   public String name()
    {
    return new test1().name(); 
   }
   public int age()
   {
       return new test2().age();
   }
   public static void main(String args[])
   {
       MainExample mi=new MainExample();
       System.out.println("姓名:"+mi.name());
       System.out.println("年龄:"+mi.age());
   }
}

    注意看类三,里面分别实现了两个内部类 test1,和test2 ,test1类又继承了Example1,test2继承了Example2,这样我们的类三MainExample就拥有了Example1和Example2的方法和属性,也就间接地实现了多继承。

四、 避免修改接口而实现同一个类中两种同名方法的调用。
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们??这就需要我们的内部类了。看下面的代码
接口
 
package com.edison;
 
public interface Incrementable
{
 void increment();
}


类 MyIncrement
 
package com.edison;
 
public class MyIncrement {
 
    public void increment()
    {
      System.out.println("Other increment()");
    }
    static void f(MyIncrement f)
    {
        f.increment();
    }
 
}

    两个方法都是一样的。在看下面这个类要继承这两个类
如果不用内部类
package com.edison;
 
public class Callee2 extends MyIncrement implements Incrementable
{
public void increment()
      {
        //代码
       }
}

    increment()这个方法是属于覆盖MyIncrement这里的方法呢?还是Incrementable这里的方法。我怎么能调到MyIncrement这里的方法?显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。看下面代码:
package com.edison;
 
public class Callee2 extends MyIncrement
{
 private int i=0;
 private void incr()
 {
       i++;
       System.out.println(i);
 }
 private class Closure implements Incrementable
 {
      public void increment()
      {
        incr();
      }
 }
 Incrementable getCallbackReference()
 {
      return new Closure();
 }
}

我们可以用内部类来实现接口,这样就不会与外围类的方法冲突了

分享到:
评论

相关推荐

    浅析单片机控制的电池温度管理系统.pdf

    在现代科技领域,单片机(又称微控制器)被广泛应用于各种自动化控制系统中。在电池管理系统中,单片机扮演着至关重要的角色,尤其在电池温度监测...对于硬件开发人员而言,本篇文献提供了一个详细的硬件实现参考方案。

    气相色谱法测定酒中甲醇数据处理方法的探讨.pdf

    文章还提到了几个重要的参考文献,如GB/T5009.48-2003《蒸馏酒及配制酒卫生标准的分析方法》和王德才等人的《气相色谱法在医学检验中的应用》,这些参考文献为气相色谱法的应用提供了标准化指导和技术支持。...

    PIC16F873微处理器在甲烷报警仪中的应用.pdf

    - 参考文献和专业指导:文章可能参考了相关文献和技术资料,为读者提供了进一步学习的资源。 【详细说明】 PIC16F873微处理器是一款高性能、低功耗的微控制器,特别适合于电池供电的便携式设备。它的核心是14位RISC...

    半导体激光美白程序对牙髓组织中降钙素相关肽和5-羟色胺的影响及意义.pdf

    同时,文章提到了“文献标识码”和DOI,表明该研究遵循了严谨的科研流程,具有较高的学术价值。对于口腔医学专业人士来说,这些发现提供了实际的临床指导,有助于优化半导体激光美白技术的应用。

    基于FPGA的Bayer到RGB图像格式转换设计.pdf

    例如,中图分类号、文献标识码和文章编号有助于将文献准确地归类和索引,方便后续的引用和研究。 9. 基金项目: 文档中提到了国家“863”计划以及自由空间激光通信系统APT分系统的资助项目,表明本研究可能得到了...

    自动化码头工控网络安全措施分析和应用.pdf

    文章强调,尽管这两类网络在硬件上是独立的,但由于业务联系,它们之间还是需要进行部分通信。 针对自动化码头的主要网络分类,文章提出了按照网络位置和网络管控进行的分类方法。从网络位置来看,码头现场包括水平...

    计及杂散电感的多芯片IGBT模块损耗计算.pdf

    文献标识码“A”代表文章属于理论与应用研究类文献;中图分类号“TM32”指这篇文章属于电力电子技术领域。 11. 作者信息与资金支持: 文章作者包括李辉、龙海洋、白鹏飞、郑媚媚,他们来自重庆大学输配电装备及...

    基于数据挖掘技术的红酒评分预测模型的设计与分析.pdf

    对于技术开发人员来说,参考文献中的算法和模型构建经验,能够指导他们在新的项目中作出更加合理的决策。 总之,基于数据挖掘技术的红酒评分预测模型是利用现代信息技术手段,对红酒行业数据进行深入分析的产物。该...

    基于FPGA和符号LMS算法的自适应均衡器设计.pdf

    文章从自适应均衡器的基本功能入手,讲解了通信系统中自适应均衡器的重要性,并阐述了基于现场可编程门阵列(FPGA)的自适应均衡器设计原理,特别是在提出符号最小均方(LMS)算法后,如何减少硬件资源消耗的过程。...

    光纤通信技术应用于采摘机器人图像检测研究.pdf

    文章通过试验数据和参考文献,提出了一些降低光纤传输损耗的方式,比如通过优化波导结构、降低弯曲损耗和提高光纤玻璃化温度等方法。 为了验证光纤通信技术在采摘机器人图像检测中的应用效果,文章进行了一系列的...

    基于网络流向的烟草企业网络安全策略研究.pdf

    7. 参考文献和专业指导:文章还提供了相关领域的文献标识码、文章编号等信息,这为有兴趣深入研究的企业和个人提供了进一步的专业资料和指导。 整体而言,本文为烟草企业提供了基于网络流向的网络安全策略研究的...

    基于MATLAB的灰色算法对304不锈钢腐蚀行为的预测.pdf

    在当前科技条件下,尽管具体腐蚀数据可测量,即具有“白”特征,但影响材料腐蚀的因素复杂多样,涉及材料内部结构、组分以及使用环境等外部因素,难以准确测定,这些因素具有“灰”特征,导致无法建立精确的腐蚀过程...

    MAXQ系列单片机的JTAG下载调试器设计.pdf

    而文献标识码“TN79A”和中图分类号则为后续的研究者提供了一个分类检索的途径,帮助他们快速定位到相关领域的研究文献。 本文的设计方案,不仅优化了MAXQ系列单片机的开发调试流程,而且为降低成本、提高软件移植...

    基于X光机的多帧PCB图像去噪算法的研究.pdf

    文章作者刘艳萍来自广东工贸职业技术学院电气自动化系,其研究方向为数字图像处理算法,该研究也为该领域提供了一种新的处理方法,具有一定的参考价值。 综上所述,该研究的核心知识点包括: 1. X光机用于PCB图像...

    静态网站毕业设计论文

    ### 静态网站毕业设计论文相关知识点 #### 一、设计思想及准备工作 ##### 1.1 设计思想 本论文旨在通过构建一个静态网站,全面宣传和展示...在论文的最后,可以列出参考的书籍、文章和其他资料,以供读者进一步查阅。

    氧化锌晶须(ZnO_w)与硅酸盐水泥复合材料的电磁波透射特性研究.pdf

    【氧化锌晶须与硅酸盐水泥复合材料的电磁波透射特性研究】 本文主要探讨了氧化锌晶须(ZnO_w)与硅酸盐水泥复合材料...同时,这项工作也强调了参考文献和专业指导在科学研究中的必要性,以确保研究的准确性和有效性。

    基于Kalman滤波的GPS跟踪环路晶振闪烁噪声建模方法.pdf

    总结来看,此项研究为GPS定位系统中的晶振闪烁噪声建模提供了新的思路和方法,有效解决了传统卡尔曼滤波在非白噪声建模上的不足。该改进方法不仅有助于提高GPS系统的定位精度和稳定性,同时对于GPS系统的优化和后续...

    混合同余法产生随机噪声的FPGA实现.pdf

    为了验证基于混合同余法生成高斯白噪声的设计,文章使用了MATLAB和Quartus II软件进行仿真验证,并用Verilog HDL语言实现模块的功能性。实验采用的是Ahera公司的Stratix IV芯片EP4SGX230KF40C4ES。通过实验结果表明...

    针对深度学习的对抗攻击综述.pdf

    传统观点认为,深度学习模型能够很好地泛化到未见过的数据上,但对抗样本的出现表明模型对输入的微小扰动异常敏感。这种攻击方式可以分为几种不同类型,包括白盒攻击(white-box attack)、黑盒攻击(black-box ...

    一种基于FPGA的高精度数字鉴相器.pdf

    本篇文献主要探讨了一种基于现场可编程门阵列(FPGA)的高精度数字鉴相器的设计和实现。数字鉴相器是用于测量两信号相位差的装置,在激光测距、通信系统和其他需要精密测相的应用中扮演着重要角色。随着技术的发展,...

Global site tag (gtag.js) - Google Analytics