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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

.NET 6 对 StackOverflow 的优化

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

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

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

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

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

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

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

Java内部类详解(转)

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

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

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

C# js调用winform方法,C# JS与winform通信

关键组件:System.windows.Forms.WebBroswer 关键声明:类前声明 namespace gdi___ {[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name "FullTrust")][System.Runtime.InteropServices.ComVisibleAtt…

下班忘打卡了什么后果_工厂园区安装人脸识别门禁系统有什么好处?

通常情况下,工厂园区的人员流动都是比较频繁且巨大的。厂区的人员不断的进进出出,主要集中在上下班的时间段里面。对于工厂园区的管理人员来说,怎样管理好人员的进出安全与快捷高效通行,与此同时完成上下班的考勤尤其重要。当前的…

史上最难逻辑题!据说99.9%的人都做不出来……

全世界只有3.14 % 的人关注了爆炸吧知识非常「逻辑」撩人于无形普林斯顿大学博士生 Raymond Smullyan 是一位非常厉害逻辑高手。在Smullyan与他非常迷恋的女音乐家的第一次约会上,他用了一招意想不到“逻辑”方法,撩她于无形。他说道:“我们来…

手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

注意:文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Terminal运行命令行工具的时候建议以管理员身份,避免踩坑为了保证操作顺畅,建议使用PowerShell先执行一下set-ExecutionPolicy Remot…

[转]了解ASP.NET MVC几种ActionResult的本质:EmptyResult ContentResult

本文转自:http://www.cnblogs.com/artech/archive/2012/08/13/action-result-01.html 定义在Controller中的Action方法大都返回一个ActionResult对象。ActionResult是对Action执行结果的封装,用于最终对请求进行响应。ASP.NET MVC提供了一系列的ActionRe…

华为nova6计算机在哪,华为nova6开发者选项在哪

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。打开华为nova6开发者选项的步骤是:1、首先进入手机桌面,点击设置。2、点击关于手机。3、连续点击版本号7次,输入锁屏密码,点击返回。4…

他是发明声呐的物理天才,被妻子家暴后出轨守寡的师母,爱因斯坦却公开支持.........

全世界只有3.14 % 的人关注了爆炸吧知识情不知所起一往而深1911年11月4日,巴黎新闻报的头版头条标题是《爱情故事:居里夫人与朗之万教授》。报纸一出,顷刻售罄;巴黎上下,满城“风流”。#寡妇科学家“乱伦”相差半旬已婚…

如何在 .NET Core 中获取 CPU 使用率

这篇文章我们分享一种如何在 .NETCore 中获取 CPU使用率的方法, 它所报告的这个值和 任务管理器 中报告的 CPU 使用值 差不多是一致的。在 .NET Framework 中,很多人会用 PerformanceCounter 类做这件事情,参考如下代码:public class Program…

uml 类图聚合与组合

聚合 聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享&#xf…

Android之ViewPager使用(用美女做的背景,给你疲惫的眼睛视觉冲击)

ViewPager的使用 我们先爆照,来点视觉冲击,其它的ViewPager弱爆了 照片看完了,接来下我们就来实现,just do it 第一步 你的项目需要有android-support-v4.jar的包,你懂的,有了才会支持ViewPager 第二步 看下项目的结构图片