A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tiancairc 中级黑马   /  2014-10-10 10:22  /  882 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.         听面试过的朋友说,黑马内部类比较难,问到的时候不知道怎么回答才好。所以我就把内部类的有关知识整理一下,以便面试的时候好知道该怎么做。
  2.         1、定义:顾名思义,内部类就是在类的内部定义一个类,这种特殊的类可以声明成public或者private,对其访问的限制与成员变量和成员方法完全相同。它的优点就是可以方便的访问外部类的私有属性,缺点就是打乱了一个类的基本结构。下面就是一个内部类的例子:
  3. class Outer{
  4.         private String info=“hello world”;
  5.         class Inner{
  6.                 public void print(){
  7.                         System.out.println(info);
  8.                 }
  9.                
  10.         };
  11.         public void fun(){
  12.                 new Inner().print();
  13.         }
  14. }
  15. public class Test{
  16.         public static void main(String args[]){
  17.                 new Outer().fun();
  18.         }
  19. }
  20.         2、使用static定义内部类
  21.         使用static也可以声明内部类,不过使用static声明的内部类就变成了外部类,此时不能访问非static的外部类属性。
  22. class Outer{
  23.         private static String info=“hello world”;
  24.         static class Inner{
  25.                 public void print(){
  26.                         System.out.println(info);
  27.                 }
  28.                
  29.         };
  30. };
  31. public class Test{
  32.         public static void main(String args[]){
  33.                 new Outer.Inner().print();
  34.         }
  35. }
  36.         3、在外部访问内部类
  37.         一个内部类除了可以通过外部类访问,也可以直接在其他类中进行调用,
  38. class Outer{
  39.         private String info=“hello world”;
  40.         class Inner{
  41.                 public void print(){
  42.                         System.out.println(info);
  43.                 }
  44.                
  45.         };
  46. };
  47. public class Test{
  48.         public static void main(String args[]){
  49.                 Outer out=new Outer();
  50.                 Outer.Inner in=out.new Inner();
  51.                 on.print();
  52.         }
  53. }
  54.         4、在方法中定义内部类
  55.         也可以在方法中定义一个内部类,但是此时内部类不能直接访问方法中的参数,如果方法中的参数要想被内部类访问,则参数前必须加上final。
  56. class Outer{
  57.         private String info="hello";
  58.         public void fun(final int temp){
  59.                 class Inner{
  60.                         public void print(){
  61.                                 System.out.println("类中的属性:"+info);
  62.                                 System.out.println("类中的属性:"+temp);
  63.                         }
  64.                 };
  65.                 new Inner().print();
  66.         }
  67. };
  68. public class Test{
  69.         public static void main(String args[]){
  70.                 new Outer().fun(30);
  71.         }
  72. }
  73.        
  74.         5、匿名内部类
  75.         匿名内部类是指没有一个具体名称的内,此概念在接口和抽象类的应用上发展起来的。一下就是一个匿名内部类的使用例子。
  76. interface A{
  77.         public void printInfo();               
  78. }       
  79. class X{
  80.         public void fun1(){
  81.                 this.fun2(new A(){
  82.                         public  void printInfo(){
  83.                                 System.out.pritnln("hello");
  84.                         }
  85.                 });
  86.         }
  87.         public void fun2(A a){
  88.                 a.prinInfo();
  89.         }
  90. }
  91. public class InnerDemo{
  92.         public static void main(String args[]){
  93.                 new X().fun1();
  94.         }
  95. }
复制代码

评分

参与人数 2技术分 +2 收起 理由
刘福双 + 1 很给力!
杨佳名 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马