黑马程序员——基础学习---内部类

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

 

  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. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值