您的位置:首页 > 移动开发 > Android开发

Android-Java第一课 内部类 (inner Class)

2016-11-16 14:32 309 查看
  总所周知,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

最后,希望大家能继续关注我。来一句诗词:百川东到海,何时复西归?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: