内部类的定义及使用


内部类的基本概念

内部类指的是一个类的内部进行其他类嵌套的操作语法形式。理论上就跟盗墓空间一样,一层层进行类的嵌套形式

范例:内部类的基本使用

 1 class Outer{//定义一个外部类
 2  private String msg="Hello World!";  3  //*********************
 4  class Inter{//此时定义了一个内部类
 5   public void print(){//定义一个普通方法
 6  System.out.println(msg);  7  }  8  }  9  //********************* 10  //在外部类中定义一个方法,这个方法负责产生内部类的对象和调用print();方法
11  public void fun(){ 12   Inter in=new Inter();//内部类的对象
13   in.print();//内部类提供的print()方法
14  } 15 } 16 public class Newbegin{ 17  public static void main(String args[]) { 18   Outer out=new Outer();//外部类对象
19   out.fun();//外部类方法
20  } 21 }

 

 

 

 

程序结构有点混乱!虽然内部类破坏了程序结构从整体上来讲不好,但从另一个方面来说

内部类的优点在于外部类的私有访问

范例:将以上程序的内部类提取到外部,要求实现同样的功能

 1 class Outer{  2  private String msg="Hello World!";  3  public String getMsg(){//通过此方法才可以取得msg的内容
 4   return this.msg;  5  }  6  public void fun(){//3.现在由out对象调用了fun()方法
 7   Inter in=new Inter(this); //4.this表示当前对象,
 8   in.print();//7.调用方法
 9  } 10 } 11 class Inter{ 12  private Outer outer; 13  public Inter(Outer outer){//5.Inter.out=main.out;
14   this.outer=outer; //6.引用传递
15  } 16  public void print(){//8.执行此方法
17   System.out.println(this.out.getMsg()); 18  } 19 } 20 public class OuterDemo{ 21  public static void main(String args[]){ 22   Outer out=new Outer();//1.实例化Outer
23   out.fun();//2.调用Outer类方法
24  } 25 }

 

 

 

 

对内部类的操作

1.通过以上代码可以发现,当前的内部类的访问必须通过外部类的方法才可以完成,如果不想通过

外部类的方法调用,那么就必须按照如下形容进行创建:

语法:外部类.内部类 内部类对象=new 外部类().new 内部类(); 

class Outer{//定义一个外部类
 private String msg="Hello World!"; class Inner{//此时定义了一个内部类
  public void print(){//定义一个普通方法
 System.out.println(msg); } } } public class Newbegin{ public static void main(String args[]) { //声明内部类对象
  Outer.Inner in=new Outer().new Inner(); in.print(); } }

 

 

1.因为外部类中有属性,这些属性只能实例化才能调用,

2.如果一个内部类只想被外部类使用,即:不希望直接产生内部类的实例化对象,那么可以使用private定义

 1 class Outer{//定义一个外部类
 2  private String msg="Hello World!";  3  private class Inner{//此时定义了一个内部类
 4   public void print(){//定义一个普通方法
 5  System.out.println(msg);  6  }  7  }  8  public void fun(){  9   Inner in=new Inner(); 10  in.print(); 11  } 12 } 13 public class Newbegin{ 14  public static void main(String args[]) { 15   //声明内部类对象
16   new Outer().fun(); 17  } 18 }

 

 

 

 

3.在进行属性访问时要加上this. 如果想要在内部类明确的使用this

就要外部类.this.属性表示外部类当前对象的属性

public void print(){//定义一个普通方法
   System.out.println(Outer.this.msg);
 }

static定义内部类

 内部类中如果使用了static进行定义,那么就表示其就是一个外部类的形式,

这个外部类的名称就是“外部类.内部类”。同时该内部类只允许访问外部类中的static 操作, 

范例:使用static定义内部类

 

 1 class Outer{//定义一个外部类
 2  private static String msg="Hello World!";
 3  static class Inner{//内部类=“外部类”
 4   public void print(){
 5    //此时只能够使用外部类中的static操作
 6    System.out.println(msg); 
 7   }
 8  }
 9 }
10 public class Newbegin{
11  public static void main(String args[]) {
12   Outer.Inner in=new Outer.Inner();//static来定义内部类
13   in.print();
14  }
15 }

 

 

 

外部类.内部类 内部类对象=new 外部类.内部类();

在方法中定义内部类

理论上内部类可以定义在类中的任意位置,在方法中定义内部类的形式是最多的

范例:在方法中定义内部类

 

 1 class Outer{//定义一个外部类
 2     private String msg="Hello World!";  3     public void fun(final int num){  4         class Inner{  5             public void print(){  6                 System.out.println("num="+num);  7                 System.out.println("msg="+msg);  8  }  9  } 10         new Inner().print();//产生内部类对象调用方法
11  } 12 } 13 public class Newbegin{ 14     public static void main(String args[]) { 15         new Outer().fun(100); 16  } 17 } 18 //此方法在JDk1.8是正常的,但是在JDK1.8之前就错误的 19 //在JDK1.7及之前,内部类要使用方法的参数,那么就必须用final定义

总结:

1.破坏了程序的结构;

2.方便进行私有属性的访问;不受private 限制

 

 

 

                                      

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM