zoukankan      html  css  js  c++  java
  • Android-Java第一课 内部类 (inner Class)

      总所周知,Android系统基于Linux,内核和驱动都是使用C/C++语言做开发,但应用层一般使用 JAVA 语言开发。今天我们就来学习一下java的内部类。

      内部类

      • 是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。
      • 对于一个名为outer的外部类和其内部定义的名为inner的内部类,编译完成后出现outer.class和outer$inner.class两类。
      • 内部类的成员变量/方法名可以和外部类的相同

      java分三大内部类

      • 成员内部类 
      • 方法内部类
      • 匿名内部类

       成员内部类

        顾名思义,成员内部类,是内部类作为外部类的成员属性,可直接使用外部类的所有成员和方法。就如父子,子可以使用父的所有东西,即使是私有(private)的。

        

     1 public class A {
     2     
     3     class B{
     4         public void A(){
     5             System.out.println("我们今晚跟小红红有约,小红红是个男生");
     6         }
     7     }    
     8     
     9     public  void show(){
    10         B b = new B();
    11         b.A();
    12     }
    13     
    14     public static void main(String[] args) {
    15         
    16         new A().show();
    17     }
    18 
    19 }

     

       方法内部类

      • 内部类定义在外部类的方法中,内部类只在该方法的内部可见,即只在内部类中使用。
      • 方法内部类使用时,在方法中创建内部类对象,用对象调用其内部类中的方法。           

      

    1 public class oldDriver {
    2     
    3     public void old () {
    4 
    5         System.out.println ( " ---------老司机上车 " );
    6     }
    7 }
     1 public class Test {
     2     
     3     public void driver () {
     4         System.out.println ( "---------开车");
     5         
     6         class B extends oldDriver {
     7             
     8         }
     9         new B().old();
    10         System.out.println( "---------司机开车" );
    11     }
    12     public static void main(String[] args) {
    13         new Test().driver();
    14     }
    15 }

      看到这,有的同学就有疑问了:为什么不直接一个外部类 extends oldDriver?

      试想,当外部类继承或者实现一个接口,那么这个类整个类就是一个老司机(oldDriver),但我只是想在我需要的时候表明我是一个有20年驾照的司机。

    这就是方法内部类。

      匿名内部类

      • 匿名内部类也就是没有名字的内部类
      • 只能使用一次,通常用来简化代码编写  
      • 必须继承一个父类或实现一个接口     
    1 public interface Qinshou {
    2     
    3     public void workInNight();
    4 }
    1 public abstract class Doctor implements Qinshou{
    2     //继承Qinshou接口 ---> 没有实现Qinshou里的抽象方法
    3     //实现Qinshuo接口 ---> 实现了Qinshou里的抽象方法
    4     public void workInDay() {
    5         System.out.println("白天传授理论知识。");
    6     }
    7     
    8 }
    1 public class Doctor1 extends Doctor{
    2   //继承Doctor
    3     public void workInNight() {
    4 
    5         System.out.println("晚上就弹钢琴");
    6     }
    7 
    8 }
    1 public class Doctor2 extends Doctor{
    2 
    3     public void workInNight() {
    4         
    5         System.out.println("晚上我要看会电影");
    6     }
    7 
    8 }
     1 public class Test {
     2     public static void main(String[] args) {
     3         Doctor1 d1 = new Doctor1();
     4         d1.workInDay();
     5         d1.workInNight();
     6         
     7         Doctor2 d2 = new Doctor2();
     8         d2.workInDay();
     9         d2.workInNight();
    10         
    11         /**
    12          * 匿名内部类 语法三步走:
    13          * 1.new 一个抽象类 或者 接口
    14          * 2.加上一个花括号
    15          * 3.给它添加为实现的方法        
    16          */
    17         
    18         Doctor d3 = new Doctor() {
    19 
    20             public void workInNight() {
    21                 System.out.println("我是doctor3 ,我晚上要睡觉");
    22             }
    23         };
    24         d3.workInDay();
    25         d3.workInNight();
    26     }
    27 }

      匿名内部类

      • 继承一个抽象类 abstract class
      • 实例实现一个接口 new / implements
      • 多线程继承Thread类
      • 多线程继承Runnable接口
     1 public class Demo {
     2 
     3     public static void main(String[] args) {
     4 
     5         Runnable r = new Runnable() {
     6             public void run() {
     7                 for (int i = 1; i <= 5; i++) {
     8                     System.out.print(i + " ");
     9                 }
    10             }
    11         };
    12 
    13         Thread t = new Thread(r);
    14         t.start();
    15     }
    16 }

    运行结果:1 2 3 4 5

     最后,希望大家能继续关注我。来一句诗词:百川东到海,何时复西归?

  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/hxb2016/p/6069415.html
Copyright © 2011-2022 走看看