• 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

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

  • 相关阅读:
    网络中有三种通讯模式:单播、广播、组播(多播)
    chmod命令
    linux bash 命令重定向和多命令执行
    linux中管道符“|”的作用
    web测试常用的 linux 命令
    集群主要分成三大类 (高可用集群, 负载均衡集群,科学计算集群)
    iOS 监测电话呼入
    iOS NSUserDefaults [setValue:forKey:] [setObject:forKey:] <Objc> setValue(_,forKey:) set(_,forKey) <Swift 3>
    iOS 将navigationItem.titleView设置为自定义UISearchBar (Ficow实例讲解)
    iOS 加载Viewcontroller的几种方法
  • 原文地址:https://www.cnblogs.com/hxb2016/p/6069415.html
Copyright © 2020-2023  润新知