java学习第七天

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

内部类
       在类的内部也可以定义另一个类


------------------------------------------------------------
//类嵌套类,类中带有类
//内部类跟方法一样,可以使用全部的访问权限修饰符,用法是一样的

接口 InterInner
public interface InterInner {
 public void method();
}


实现接口 InterInnerImpl

public class InterInnerImpl implements InterInner {

 @Override
 public void method() {
 }

}

 

普通类  Outer

public class Outer{
      private int intField;

       //第一种:成员内部类,跟成员属性(方法同级),可以类比成员属性

       class Inner1{}     //Innerl、Inner2、Inner3都是成员内部类
      
       class Inner2{}

       class Inner3{}

      //编译后的表现格式:Outer$2Inner4.class
      public void method1(){
         int a = 0;
          //第二种:局部内类
      //跟局部变量同级,用法类别局部变量,不能使用修饰符

        class Inner4{}
                      //Inner4、Inner5都是局部内 类
        class Inner5{}
}
       //第三种: 静态内部类  可以类比  静态属性
        static class Inner6{}

      //第四种: 匿名内部类
       //因为InterInner interinner = new InterInner() 编译不能通过
      //抽象类 不能实例化
    //所以
      InterInner interinner = new InterInner(){

      @Override
       public void  method(){}  };


    public static void main(String[] args){
       //第一种:成员内部类  创建 对象的 格式
       Outer outer = new Outer();
       Outer.Inner inner1 = outer.new Inner();
       Outer.Inner2 inner2 = new Outer().new Inner2();

       //第二种:局部内部类
      //无法通过普通new进行创建,可以通过继承/实现接口的方式进行


     //第三种:静态内部类
      Outer.Inner5 inner5 = new Outer.Inner5();
    
     //第四种:匿名内部类

     InterInner interImp1 = new InterInnerImp1();
   
    //匿名内部类创建对象方式:等价于 InterInner interImp1 = new InterInnerImp1();

   //不一样的地方是:没有类名

   //1、继承某一个类
   //2、实现某一个接口
    

}

}

----------------------------------------------------------------
普通类 InnerFather

public class InnerFather {

}


接口  InnerInterface

public interface InnerInterface {

}

 

普通类 MemberOuter

public class MemberOuter{
    private int privateField = 1;
    public static int staticField = 3;
    public int a = 1;

  //内部类跟普通类是一样的,普通类能干什么,内部类就可以干什么
  //比如:继承  实现接口
  //可以帮助外部类实现多继承的功能
  //成员内部类运用场景:
  //1、通过内部类可以实现类的多继承
  //2、如果外部类是一个 逻辑非常复杂的一个类,需要操作很多属性
  //或方法 这个时候,可以对功能进行拆分让某个或多个内部类,帮忙处理

   class Inner extend InnerFather implements InnerInterface{

      public Inner(){}

      public int a=2;

/*Outer 对象 --》Inner 对象 --》内部成员

  外部类 --》Inner 类 --》静态成员
    Inner 类 静态成员 --》常量


   因为访问成员内部类中属性 需要通过外部类的对象,进行内部类对象的创建
然后通过内部类的对象进行访问。如果 在内部类中声明 静态属性 那么只能
通过内部类的 类名进行访问 此时 如果内部类是成员内部类时 那么外部类
不能通过 外部类名.内部类名 访问内部类静态成员属性 所以 要么把内部类变成
静态内部类 要么把 静态成员 属性变成 常量(常量表达式)

 

//成员内部类中 不能定义静态的属性
public static final int innerStaticField = 1; //常量表达式
public static final String stringInnerStaticField = "aaa";


//同名属性的情况下访问
public void method(){
int a = 3;
//如果没有特殊指定:this 或Outer.this
//那么访问顺序跟子类属性访问规则一致
//先局部(内部类) -- 成员(内部类) -- 外部
//就近原则

System.out.println("a:" + a);
System.out.println("a:" + this.a);
//内部类访问外部类属性的方法Outer.this.属性
System.out.println("a:" + MemberOuter.this.a);
}
 
//外部类访问控制
public void method2(){
//可以访问外部类的私有属性
System.out.println("outer 私有属性" + privateField);
//可以访问外部类的静态属性

System.out.println("outer 私有属性" + staticField);
}

//普通方法
public void method(){
Inner inner = new Inner();
inner.method();
}

public static void method2(){

//外部类静态方法中不能使用成员内部类,如果要调用 就把成员内部类定义成
静态
//可以类比静态方法调用非静态属性
//Inner inner = new Inner();
}

public static void main(String[] args){
MemberOuter.Inner inner = new MemberOuter().new Inner();
  //inner.method();
  //inner.method2();
  
  
  MemberOuter outer = new  MemberOuter();
  
  outer.method();
 }
 
}


-------------------------------------------------------------------
public class StaticOuter {
 
 private static int staticField = 1;
 public int intField = 2;
 
 static class Inner{
  public int innerField = 1;
  public static int  innerStaticField = 2;
  //可以定义非静态方法
  //静态内部类:
  //非静态方法,可以访问内部中静态/非静态成员,可以访问外部类的静态成员,无法访问,外部类非静态成员
  //原因:StaticOuter.Inner inner = new StaticOuter.Inner();
  //创建静态内部类对象时候,没有创建外部的对象,
  //此时,不是通过外部类对象访问非静态属性,所以不能访问
  public void method(){
   //非静态方法中可以访问外部类静态属性,但不能非静态属性
   //Cannot make a static reference to the non-static field intField
   ///System.out.println("outer 非静态属性:" + intField);
   System.out.println("outer 静态属性:" + staticField);
   
   //可以访问内部类定义的静态属性 ,也可以访问非静态属性
   System.out.println("inner 静态属性:" + innerStaticField);
   System.out.println("inner 非静态属性:" + innerField);
  }
  
  //静态方法
  //静态内部类:
  //静态方法只能访问静态属性或方法,不能访问非静态方法或/属性,不管是外部还是内类
  public static void  method2(){
   //Cannot make a static reference to the non-static field intField
   //System.out.println("outer 非静态属性:" + intField);
   System.out.println("outer 静态属性:" + staticField);
   //可以访问内部类定义的静态属性 ,也可以访问非静态属性
   System.out.println("inner 静态属性:" + innerStaticField);
   //Cannot make a static reference to the non-static field innerField
   //System.out.println("inner 非静态属性:" + innerField);
  }
 }
 public static void main(String[] args) {
  //成员内部类
  //MemberOuter.Inner inner = new MemberOuter().new Inner();
  //静态内部类
  StaticOuter.Inner inner = new StaticOuter.Inner();
  inner.method();
  
  
 }
}
 

 

 

转载于:https://my.oschina.net/u/2542711/blog/540714

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大一计算机课实训总结1000字,大一计算机实训报告.doc

文档介绍:大一计算机实训报告.doc大一计算机实训报告总结及相关经验当迈入中南大学的第一刻时,我知道我的新的生活开始了。而不知不觉第一学期即将在漫漫寒冬中结束,计算机课上有很多感受,是应该对自己所学有个总结的时候了。计算机应用是实践性很强的课程,它要求我…

并不是每个女生都能穿出这种效果......

1 阿姨,我需要一个你▼2 像极了是悬空的...▼3 放弃吧,整点阳间的...▼4 一个人如何自拍?(Twitter:Kskb_Tsuki)▼5 哥哥表示睡着了就把她饼干吃了...(via.dy俩小小赵)▼6 敲法器…

手把手教你学Dapr - 1. .Net开发者的大时代

Dapr全称Distributed Application Runtime,分布式应用运行时Dapr的口号简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单、可移植Dapr的目标最佳实践的构建块任何语言或框架一致性,可移植,开放的API采纳标准可扩展…

Andorid之网络通信框架Volley使用和总结

Volley Volley 是 Google 推出的 Android 异步网络请求框架和图片加载框架。在 Google I/O 2013 大会上发布。 从名字由来和配图中无数急促的火箭可以看出 Volley 的特点:特别适合数据量小,通信频繁的网络操作

如何进行服务器选购[转]

各大服务器厂商为了更突出产品热点:开始在服务、方案方面进行花样翻新、包装,但万变不离其中,不管厂商们怎么样包装,只要我们抓住重点分析,希望下面的文章能够为您提供一些参考与帮助:详情点击:…

闲鱼有微信小程序吗_微信小程序商品展示页面(仿咸鱼)

项目中做了一个商品发布展示的页面,记录下来解决问题:想在setData中更改数组具体下标中的某个值let one "lowMoney[" 0 "].money";this.setData({[one]: (product.currentPrice * 0.1).toFixed(2), //1折})快去发布商品吧~~~已下…

objective-c中的static

在方法之外定义的变量不仅是全局变量,还是外部变量.但是很多场合,我们只需要定义为全局变量,并不是外部变量.也就是说希望定义的全局变量只在特定文件中是全局的,这个变量也只有在特定的类中的方法能访问,再也没有其他方法需要访问这个变量了. 这就引出了static. 被static修饰过…

电子计算机制作探测,如何自己制作一个简易的金属探测器

这是一个金属探测电路,它可以隔着地毯探测出地毯下的硬币或金属片。这个小装置很适合动手自制。一、元器件的准备电路中的NPN型三极管型号为9014,三极管VT1的放大倍数不要太大,这样可以提高电路的灵敏度。VD1-VD2为1N4148。电阻均为1/8W。金属…

“对不起,我们只招父母毕业于名牌院校的孩子”:最可怕的,是你还以为学历不重要...

全世界只有3.14 % 的人关注了爆炸吧知识1 近日,有一条新闻引发网友热议。成都某小学入学面试,要求家长除了带照片和身份证件之外,还要带“父母学历证书原件及复印件”。网上有种说法,该小学筛选的标准是父母毕业于211院校。后来眼…

.NET 6 对 StackOverflow 的优化

.NET 6 对 StackOverflow 的优化Intro去年写了一系列的傻逼代码, 其中有一篇 写了多年代码,你会 StackOverflow 吗,昨天一不小心又写了一个 StackOverflow 代码。。然后想把新的代码加到原来 StackOverflow 的示例中,把原来的示例项目改成了 …

【原】python中文文本挖掘资料集合

这些网址是我在学习python中文文本挖掘时觉得比较好的网站,记录一下,后期也会不定期添加:1.http://www.52nlp.cn/python-%E7%BD%91%E9%A1%B5%E7%88%AC%E8%99%AB-%E6%96%87%E6%9C%AC%E5%A4%84%E7%90%86-%E7%A7%91%E5%AD%A6%E8%AE%A1%E7%AE%97-…

Android之从网络上获取图片的两种方式讲解:thread+handle和AsyncTask方式

从网络上获取图片是一个比较耗时的操作,放在主线程会导致阻塞主线程,响应超时,所以我们不能把它放在主线程里操作,必须放在一个子线程里,我打算采用两种方式去实现。1、采用thread去获取图片,获取到后通过handle把消息发送到与主线程绑定的消息队列中(也就是主线程的loo…

freeware

http://www.nirsoft.net/utils/iconsext.html转载于:https://www.cnblogs.com/androidme/archive/2013/03/13/2957509.html

卸载wrapt_[python] 安装TensorFlow问题 解决Cannot uninstall 'wrapt'. It is a distutils installed project...

cmd安装 pip install tensorflow1.遇到了ERROR: Cannot uninstall wrapt. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.办法1:输入 pip install -U --ig…

推荐16款非常有创意的婚礼请贴

为什么80%的码农都做不了架构师?>>> 日期:2012-4-5 来源:GBin1.com 婚约是标志着你和你的伴侣很快就要有新的开始了,一起开始那段新的历程!婚礼是整个人生旅途中的一个重要里程碑,在婚礼的邀请…

三年磨一剑,五次被拒稿,交大博士坚持稿件申诉,终发表学科顶刊

全世界只有3.14 % 的人关注了爆炸吧知识本文来源:募格学术三年磨一剑,经历五轮审稿被拒,他坚持不懈,最终申诉成功发表物理顶刊;厚积薄发、精益求精,他潜心科研,2年内发表6篇高水平论文&#xff…

Android之面试题精选,自己收藏下

1.android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念: 答:dvm是dalivk虚拟机。每一个android应用程序都在自己的进程中运行,都拥有一个dalivk虚拟机实例。而每一个dvm都是在linux的一个进程。所以说可以认为是同一…

Java内部类详解(转)

说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。下面是本文的目录大纲&…

红旗河最早设计计算机的目的,论红旗河的利弊及其替代方案

最近网上有一条人工河很吸人眼球,它就是我国许多专家们提议的"藏水入疆"的西线调水工程——红旗河,其初衷是好的,想将丰沛的西藏雪化水及降水引入干旱的西北地区滋润出良田来改善中华民族的生存环境,但我认为该工程将是…

.NET Conf 2021 正在进行中,带你看一看微软带来了什么内容

今年最大的.NET活动正在进行, 可以通过Channel9 https://channel9.msdn.com/Events/dotnetConf/2021 看具体的Session 。微软和社区一直在努力统一.NET技术栈。从Visual Studio 到 SQL 和 Azure ,所有功能聚集一堂,让您在桌面、网络、移动和跨平台开发梦…