zoukankan      html  css  js  c++  java
  • Java内部类


    常见的3大内部类,其实还有其他内部类,其他更更少用

       成员内部类
         特点:不对外开放,高内聚的 {只能去本类new xx调用内部的功能}
           不需要外部知道我里面的实现(例生活例子:我买药品,不需要药是哪个农户提供给生产厂家的)
           如果是外部强制要调用,也是可以的,不建议
           这个也是可以禁用,把内部类Bb的构造方法设置为private就不可以调用了。
            (new Aa()).new Bb().xxx方法名() ;

      方法内部类
        特点:不对外开放,短暂性的,方法执行完了就是没有的了。
           通常方法内部类是继承某个抽象类,或是类,或是实现接口来体现的方法内部类。


     匿名内部类{经常用的}

        特点:不对外公开,进行实现功能,继承类,继承抽象类,实现某个接口的匿名内部类,实现相应的方法。
          特别注意:匿名内部类,匿名指的是 ,new 关键字右边的那个对象--如继承,或是接口 {忌:一定不是一个具体实际的类}
              IYeYou yy = new IYeYou()

          步骤:
            1:new 一个抽象类或是接口 new Pc() --new 的是不具体的所用说是匿名 【具体的是普通的类了】
            2:加入一个大括号 {}
            3:现在未实现的方法

     --------------------------------------------------------------------------------------------------------------------------------------------------

        下面依依分析代码

    成员内部类:

         特点:不对外开放,高内聚性

    package com.test.memberinnerclass;
    
    public class MyMemberClass {
    
        class Aa{
             public void xingQing(){
                
             System.out.println("我的是内部类----功能提供高兴的 心情!");
             }
        }
        
        public void play(){
            
            System.out.println("我在高兴的玩撒!");
            
            new Aa().xingQing() ;
        }
    
        
    }
        

    进行调用一下

     1 package com.test.memberinnerclass;
     2 
     3 
     4 public class MemberClassTest {
     5 
     6     /**
     7      * @param args
     8      */
     9     public static void main(String[] args) {
    10         
    11         MyMemberClass mst = new MyMemberClass() ;
    12         mst.play() ;
    13         //现在是尝试的调用内部的类,很明显的是调用不了的。
    14             //Aa s = new Aa() ;                //报错的
    15             //mst.Aa ma = new mst.Aa() ;       //报错
    16         
    17          //这个就是可以的但是不建议这样用,说好了,内部类,不可以这样调用的
    18         //new MyMemberClass().new Aa().xingQing() ;
    19         
    20               
    21     }
    22 
    23 }

    -----------------------------------------------------------------------------------------------------------------------------------------

      方法内部类

             特点:对外不公开,短暂性的,当方法执行完了就没有了的。

      首先我先定义一个外部类做辅助:

                    

           定义这个类:

              BanLiDuanZhanJingShengZheng

    package com.test.methodinnerclass;
    /**
     * 颁发精神病证书类
     * @author Administrator
     *
     */
    public class BanLiDuanZhanJingShengZheng {
    
        public void noProblem(){
            System.out.println("颁发精神病证,我杀人也是没问题的----我背景'有人'");
        }
    
    }

     定义第二个类含义方法内部类的

    package com.test.methodinnerclass;
    
    public class MethodInnerClass {
     
          /**
           * 方法内部的特点:不对外开放,短暂性有效的,当方法执行完就是没有校的了,也是符合业务流程功能,
           * 因为我开车的时候,撞到了人,此时我才要颁发那个证书的。
           * 
           * ????
           * 问题来了:疑问,老师为什么要定义一个匿名内部类Cc来呢,然后再次继承一个颁发精神病的类。
           * 我的观点:干脆就是new 一下那个颁发精神病的类进行调用不就可以实现相同的效果功能吗?
           * 老师说:有时那个类是-----抽象类,必须需要继承类或是实现接口才能达到那个实际的
           * 感悟:有道理,没错。
           */
          
          //定义一个方法实现开车
          public void driverCar(){
              System.out.println("我在以150km/h的速度在开车!");
              System.out.println("撞坏了人");
              //此时定义了一个方法内部类为Cc   {内部类可以继承某个类,抽象类,或实现接口}
              class Cc extends BanLiDuanZhanJingShengZheng{
                //须知此时我就时继承了一个颁发精神病的类,方法就是进行了继承过来的了
              }
              new Cc().noProblem() ;
              
              System.out.println("以前事情都是没有问题的了!");
              
              
          }
        
        
        
        
        
        
    }

     我们进行测试运行

    package com.test.methodinnerclass;
    
    public class MethodTest {
    
        public static void main(String[] args) {
            
            MethodInnerClass mend= new MethodInnerClass() ;
            
            //此时我调用的饿是开车方法(内部有个匿名内部类)
            mend.driverCar() ;
            
            
    
        }
    
    }

     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     匿名内部类:

               特点:

            不对外公开,进行实现功能,继承类,继承抽象类,实现某个接口的匿名内部类,实现相应的方法。

          特别注意:匿名内部类,匿名指的是 ,new 关键字右边的那个对象--如继承,或是接口 {忌:一定不是一个具体的类}
       
        IYeYou yy = new IYeYou()

              实现步骤:

                 1:new 一个抽象类或是接口 new Pc() --new 的是不具体的所用说是匿名 【具体的是普通的类了】

                 2:加入一个大括号 {}

                 3:现在未实现的方法

    package com.test.anonymousinnerclass;
    
    public class AnonymousTest {
    
        //测试
        public static void main(String[] args) {
            
            //抽象类是不可以来进行创建对象的。
            //Doctor docs = new Doctor() ; //报错
               //这个是普通进行创建的实际类
               DoctorOne done = new DoctorOne() ;
            
                done.workdaycase() ;
                done.workNight() ;
                System.out.println("--------------------------------") ;    
                
                //此时我这里是个匿名的内部类  new 抽象类
                Doctor dess = new Doctor(){
    
                        public void workNight() {
                            
                            System.out.println("我是个第三个教授3号,我晚上是溜冰玩耍的!");
                        }
                } ;
                
                dess.workdaycase() ;
                dess.workNight() ;
              System.out.println("--------------------------------") ;    
            
                //此时我这里是个匿名的内部类  new 接口
                IYeYou yy = new IYeYou(){
    
                    public void workNight() {
                        System.out.println("");
                        
                    }
    
                        
                } ;
                
                yy.workNight() ;
                
                
        }
    
    }

    -----------------------------------------------------------------以上就是常见的3大内部类--------------------------------------------------------------

    ---------------------------------------------------------------------------
      感悟:
        内部类有有点也是有缺点,其中,匿名内部类是用的最多的,其他的比较少用。


          内部类的也有优点和缺点,但是我们在Android中是经常用的。
            优点:我需要实现一个功能,只需在内部进行创建new就是可以实现了,不需要外部进行的创建。
            缺点:不好管理维护,耦合度很高。

    -----------------------------------------------------

    感谢你光临!

  • 相关阅读:
    Swift的闭包(一):闭包简介、闭包表达式的优化
    iOS 用户体验之音频
    【iOS】Core Bluetooth
    【iOS】3D Touch
    golang中channel的超时处理
    Objective-C 中的 BOOL
    2015年总结
    load vs. initialize
    正则表达式
    When does layoutSubviews get called?
  • 原文地址:https://www.cnblogs.com/HB135WBH/p/H225325H882.html
Copyright © 2011-2022 走看看