中国竞彩比分直播网
  24小时广告服务热线:13176674641     用户名: 密码: 验证码:    
行业动态(2692) 媒体报道(1484) 市场商情(1072) 相关技术(1086) 政策法规(958)
 您现在所在位置:中国加固工程网首页 >>> 行业资讯 >>> 正文
JAVA内部类的 一些总结
【颜色: 绿 发布日期:2019年5月28日   信息来源:互联网   浏览100次 【字体: 】  

JAVA内部类的 一些总结

  作为刚入门Java的 小白,这两天看到内部类,这里做一个总结,如出缺点,迎接斧正~

  内部类是指在一个外部类的 内部再定义一个类。类名不须要和文件夹雷同。

  内部类分为 成员内部类、局部内部类、静态嵌套类、匿名内部类 。
 

 

  1.成员内部类

  成员内部类是最通俗的 内部类,它的 定义为位于另一个类的 内部,形如下面的 情势

class Outter {

  private int age = 12;

  class Inner {



  private int age = 13;



  public void print() {





  int age = 14;





  System.out.println("局部变量" + age);





  System.out.println("内部类变量" + this.age);





  System.out.println("外部类变量" + Outter.this.age);



  }

  }
}
public class test1 {

  public static void main(String[] args) {



  Outter out = new Outter();



  Outter.Inner in = out.new Inner();



  in.print();

  }
}

  运行成果

  局部变量14
  内部类变量13
  外部类变量12

  从本例可以看出成员内部类,就是作为外部类的 成员,可以直接应用外部类的 所有成员和办法,即使是private的 。固然成员内部类可以无前提地拜访外部类的 成员,而外部类想拜访成员内部类的 成员却不是这么随心所欲了。在外部类中假如要拜访成员内部类的 成员,必须先创建一个成员内部类的 对象,再经由过程指向这个对象的 引用来拜访

class Outter {

  private int age = 12;

  public Outter(int age) {



  this.age = age;



  getInInstance().print();
//必须先创建成员内部类的 对象,再进行拜访!

  }

  private Inner getInInstance() {



  return new Inner();

  }

  class Inner {



  public void print() {





  System.out.println("内部类没同名,所以直接调用外部类成员变量" + age);



  }

  }
}
public class test1 {

  public static void main(String[] args) {



  Outter out = new Outter(10);

  }
}

  运行成果

  内部类没同名,所以直接调用外部类成员变量10
  内部类可以拥有private拜访权限、protected拜访权限、public拜访权限及包拜访权限。

  比如上面的 例子,假如成员内部类Inner用private润饰,则只能在外部类的 内部拜访,假如用public润饰,则任何处所都能拜访;假如用protected润饰,则只能在同一个包下或者持续外部类的 情况下拜访;假如是默认拜访权限,则只能在同一个包下拜访。

  这一点和外部类有一点不一样,外部类只能被public和包拜访两种权限润饰。

  我小我是这么懂得的 ,因为成员内部类看起来像是外部类的 一个成员,所以可以像类的 成员一样拥有多种权限润饰。要留意的 是,成员内部类不克不及含有static的 变量和办法。因为成员内部类须要先创建了外部类,才能创建它本身的

  2.局部内部类

  局部内部类是定义在一个办法或者一个感化域里面的 类,它和成员内部类的 差别在于局部内部类的 拜访仅限于办法内或者该感化域内。

  定义在办法里的 内部类

class Outter {

  private int age = 12;

  public void Print(final int x) {
  //这里局部变量x必须设置为final类型!



  class Inner {





  public void inPrint() {







  System.out.println(x);







  System.out.println(age);





  }



  }



  new Inner().inPrint();

  }
}
public class test1 {

  public static void main(String[] args) {



  Outter out = new Outter();



  out.Print(10);

  }
}

  运行成果

  10
  12

  本例中我们将内部类移到了外部类的 办法中,然后在外部类的 办法中再生成一个内部类对象去调用内部类办法。假如此时我们须要往外部类的 办法中传入参数,那么外部类的 办法形参必须应用final定义。

  换句话说,在办法中定义的 内部类只能拜访办法中final类型的 局部变量,这是因为在办法中定义的 局部变量相当于一个常量,它的 生命周期超出办法运行的 生命周期,因为局部变量被设置为final,所以不克不及再内部类中改变局部变量的 值。(这里看到网上有不合的 解释,还没有彻底搞清楚==)

  定义在感化域内的 内部类

class Outter {
  private int age = 12;
  public void Print(final boolean x) {  //这里局部变量x必须设置为final类型!



  if(x){






class Inner {









  public void inPrint() {











  System.out.println(age);









  }







  }






new Inner().inPrint();



  }




  }
}
public class test1 {

  public static void main(String[] args) {



  Outter out = new Outter();



  out.Print(true);

  }
}

  运行成果

  12


  3.静态嵌套类

  又叫静态局部类、嵌套内部类,就是润饰为static的 内部类。声明为static的 内部类,不须要内部类对象和外部类对象之间的 接洽,就是说我们可以直接引用outer.inner,即不须要创建外部类,也不须要创建内部类。

class Outter {

  private static int age = 12;

  static class Inner {



  public void print() {





  System.out.println(age);



  }

  }
}
public class test1 {

  public static void main(String[] args) {



  Outter.Inner in = new Outter.Inner();



  in.print();

  }
}

  运行成果

  12

  可以看到,假如用static 将内部内静态化,那么内部类就只能拜访外部类的 静态成员变量,具有局限性。

  其次,因为内部类被静态化,是以Outter.Inner可以当做一个整体看,可以直接new 出内部类的 对象(经由过程类名拜访static,生不生成外部类对象都没紧要)

  4.匿名内部类

  匿名内部类应当是日常平凡我们编写代码时用得最多的 ,在编写事宜监听的 代码时应用匿名内部类不只便利,并且使代码加倍轻易保护。下面这段代码是一段Android事宜监听代码

scan_bt.setOnClickListener(new OnClickListener() {





  @Override





  public void onClick(View v) {







  // TODO Auto-generated method stub





  }



  });



  history_bt.setOnClickListener(new OnClickListener() {








  @Override





  public void onClick(View v) {







  // TODO Auto-generated method stub





  }



  });
  这段代码为两个按钮设置监听器,这里面就应用了匿名内部类,广州java培训Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。。具体地位是这段

new OnClickListener() {






  @Override





  public void onClick(View v) {







  // TODO Auto-generated method stub





  }



  }
  代码中须要给按钮设置监听器对象,应用匿名内部类可以或许在实现父类或者接口中的 办法情况下同时产生一个响应的 对象,然则前提是这个父类或者接口必须先存在才能如许应用。当然像下面这种写法也是可以的 ,跟上面应用匿名内部类达到后果雷同

private void setListener()
{

  scan_bt.setOnClickListener(new Listener1());




  history_bt.setOnClickListener(new Listener2());
}
class Listener1 implements View.OnClickListener{

  @Override

  public void onClick(View v) {

  // TODO Auto-generated method stub

  }
}
class Listener2 implements View.OnClickListener{

  @Override

  public void onClick(View v) {

  // TODO Auto-generated method stub

  }
}

  这种写法固然能达到一样的 后果,然则既冗长又难以保护,所以一般应用匿名内部类的 办法来编写事宜监听代码。同样的 ,匿名内部类也是不克不及有拜访润饰符和static润饰符的 。

  匿名内部类是独一一种没有构造器的 类。正因为其没有构造器,所以匿名内部类的 应用范围异常有限,年夜部分匿名内部类用于接口回调。匿名内部类在编译的 时刻由体系主动起名为Outter$1.class。一般来说,匿名内部类用于持续其他类或是实现接口,并不须要增长额外的 办法,只是对持续办法的 实现或是重写。


 上一条:生男孩的秘诀有哪些?4妙招提高几率
 下一条:算算你几岁结婚 八字就可以看出来
 
 ◎其他资讯
放器帐户密码,服务器处理后发送登录响应2019-11-15
ͳһ������Ϸ���ֽ�����Ļ���ԭ��2019-11-15
泰国签证翻译中的商务签证材料是什么?2019-11-15
三亚亲子旅游推荐景点?2019-11-15
私生子和老婆,哪个我都爱怎么办2019-11-15
 ※加固工程网版权与免责声明:

凡本网注明“信息来源:加固工程网”的所有文字和图片稿件,版权均属于加固工程网所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发表。已经本网协议授权的媒体、网站,在下载使用时必须注明“信息来源:加固工程网”,违者本网将依法追究责任。

本网未注明“信息来源:加固工程网”的文/图等稿件均为转载稿,本网转载出于传递更多信息的目的,并不意味着赞同其观点或证实其内容的真实性。如其他媒体、网站或个人从本网下载使用,必须保留本网注明的“信息来源”,并自负版权等法律责任。如擅自篡改,本网将依法追究责任。如对稿件内容有疑议,请及时与我们联系。

如本网转载稿涉及版权等问题,请作者在一周内速来电或来函与加固工程网联系。
联系电话:13176674641
赞助商链接
您首选的等离子切割机品牌
中国最大等离子切割机厂家您首选的等离子切割机品牌www.whxinhuo.com薪火科技等离子切割机通过ISO质量认证,
http://www.whxinhuo.com
上海精密仪器切割机老品牌
上海精密仪器切割机老品牌,值得信赖www.canytec.com.cn专业的精密仪器仪表企业,老品牌值得信赖,咨询热线:02
http://www.canytec.com.cn
设为首页 | 收藏本站 | 关于我们 | 网站帮助 | 版权申明 | 联系我们 | 友情链接
服务热线:13176674641  传真:13176674641   QQ交流群①:82819534
客户服务信箱:470901000#qq.com 企业投递资讯信箱:470901000#qq.com 请将#换成@  点击和我联系吧!
足球比分360