黑马程序员技术交流社区

标题: day10 自己简单总结了一些内部类的一些知识 [打印本页]

作者: 超人d咖啡也加糖    时间: 2016-3-7 14:24
标题: day10 自己简单总结了一些内部类的一些知识
主要是根据官方视频和笔记,自己系统了一下。
1.内部类的基础、特点、访问方式。
(1)内部类可以直接访问外部类的成员,包括私有。
(2)外部类要访问内部类的成员,必须创建对象。
(3)访问方式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
      Outer.Inner oi=new Outer().new Inner();
2.内部类私有的情况。
  使用公共的成员方法进行访问
3.静态成员内部类。
  访问方式是: 外部类名.内部类名 对象名 = 外部类名.内部类对象;
  最开始的写法是 Outer.Inner oi=Outer.new Inner();
  但是按习惯进行规划后是  Outer.Inner oi=new Outer.Inner();
4.局部内部类。
(1)顾名思义,是在方法内部的类,在方法内创建对象进行访问。
(2)局部内部类访问局部变量必须用final修饰
      原因:因为当调用这个方法时,局部变量如果没有用final修饰,
      他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局
      部变量也会消失,那么如果  局部内部类对象还没有马上消失想
      用这个局部变量,就没有了,如果用final修饰会在类加载的时候
      进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用。
      但是jdk1.8取消了这个事情,所以我认为这是个bug。(官方笔记)
5.匿名内部类。(重写单个方法)
  内部类的简化写法

  new 类名或者接口名(){
                        重写方法;
                }.调用重写的方法

  本质是是一个继承了该类或者实现了该接口的子类匿名对象。
6.匿名内部类。(重写多个方法)
(1)如果只使用单个方法,可以和5中一样调用。
(2)如果想调用多个方法,可以使用父类引用指向子类对象的方法调用。

      类名或者接口名() 对象名=new 类名或者接口名(){
                        重写方法;
      }
      对象名.重写的方法;

      缺点:不能调用子类特有的方法,因为父类引用指向子类对象只能
      调用重写过的方法,如果想调用子类特有的方法,必须向下转型,
      但是向下转型需要子类类名,但是匿名内部类没有类名。父类也就
      无法向下转型。
7.余下的还有一些是面试题神马的,视频和官方笔记都有。
作者: fighting2016    时间: 2016-3-7 22:17
谢谢分享,楼主好人




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2