zoukankan      html  css  js  c++  java
  • Android菜鸟成长记2内部类

    Java内部类

      内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。

          内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。

    一、成员内部类

      成员内部类也是最普通的内部类,它是外围类的一个成员,所以他是可以无限制的访问外围类的所有 成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。(简单的来说就是定义在一个类里面的另一个类)

          在成员内部类中要注意两点

      第一:成员内部类中不能存在任何static的变量和方法;

      第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。

    下面简单的是一个成员内部类的例子:

     1 public class Outer { 
     2     public static void main(String[] args) { 
     3         Outer outer = new Outer(); 
     4         Outer.Inner inner = outer.new Inner(); 
     5         inner.print("Outer.new"); 
     6  
     7         inner = outer.getInner(); 
     8         inner.print("Outer.get"); 
     9     } 
    10  
    11     // 个人推荐使用getxxx()来获取成员内部类,尤其是该内部类的构造函数无参数时 
    12     public Inner getInner() { 
    13         return new Inner(); 
    14     } 
    15  
    16     public class Inner { 
    17         public void print(String str) { 
    18             System.out.println(str); 
    19         } 
    20     } 
    21 } 

    二、成员内部类

      成员内部类是指内部类定义在方法和作用域内。

    下面是一个简单的列子:

    1.首先我们先创建一个方法

    1 public class DuanZhanShiChuangZhen {
    2 
    3     public void noProblem () {
    4         System.out.println("不小心撞到人了,怎么办,不过好像我爸是李刚");
    5     }
    6 }

    2.然后创建一个测试类来实现内部类的方法的定义和使用

     1 public class Test {
     2 
     3     public void driver () {
     4         System.out.println("我正在开车");
     5         //成员内部类
     6                 class B extends DuanZhanShiChuangZhen {
     7             
     8         }
     9         new B().noProblem();//调用内部类中的方法
    10         System.out.println("爱死我爹了");
    11         
    12     }
    13     
    14     public static void main(String[] args) {
    15         new Test().driver();//在main方法中调用
    16     }
    17 }            

    输出的结果:

    三、匿名内部类

      匿名内部类,从名字上来看就是没有名字的,就是没有名字的内部类

      正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

      但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

    夏明是一个简单的匿名内部类的例子:

     1.先定义一个QinShou的接口(老师教的案例,只在于理解,请不要过多猜测,本人很纯洁的)

    1 package memberinner3;
    2 
    3 public interface QinShou {
    4 
    5     public void workInNight();
    6 }

     2.定义一个Doctor 的抽象类来继承Qinshou的借口

    1 package memberinner3;
    2 
    3 public abstract class Doctor implements QinShou{
    4 
    5     public void workInDay () {
    6         System.out.println("白天传授理论知识");
    7     }
    8 }

     3.下面就是同过main方法来实现匿名内部类的

     1 package memberinner3;
     2 
     3 public class Test {
     4 
     5     public static void main(String[] args) {14         //匿名内部类
    15         //new出一个抽象类或借口
    16         //直接加一个{}
    17         //在{}里面实现方法
    18         Doctor d = new Doctor() {
    19             
    20             @Override
    21             public void workInNight() {
    22                 System.out.println("洗洗睡");
    23             }
    24         };
    25         d.workInDay();
    26         d.workInNight();
    27     }
    28     
    29 
    30 }

    输出的结果:

    以上就是实现匿名内部类方法。

  • 相关阅读:
    《Windows编程循序渐进》——对话框应用程序2
    《Windows编程循序渐进》——对话框应用程序
    《Windows编程循序渐进》——建立MFC应用程序
    关于基类和子类构造函数的问题
    《Windows驱动开发技术详解》之分层驱动程序
    《Windows驱动开发技术详解》之驱动程序调用驱动程序——通过设备指针调用其他驱动程序
    《Windows驱动开发技术详解》之驱动程序调用驱动程序——以文件句柄形式调用其它驱动程序
    《Windows驱动开发技术详解》之定时器
    《Windows驱动开发技术详解》之自定义StartIO
    四种UNIX实现
  • 原文地址:https://www.cnblogs.com/lsyverygood/p/6068541.html
Copyright © 2011-2022 走看看