关闭

创建普通内部类对象与创建嵌套类对象的不同

标签: 内部类-嵌套类
1120人阅读 评论(0) 收藏 举报
分类:

为什么需要使用内部类?
使用内部类的原因:每个内部类都能独立的继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)的实现,对内部类都没有影响。实际上内部类有效的实现了“多重继承”,就是说,内部类允许继承多个非接口类型。

我们知道内部类自动拥有对外部类所有成员的访问权,那么这是如何做到的吗?当某个外部类对象创建了一个内部类对象时,此内部类对象必定会秘密的捕获一个指向那个外部类对象的引用。然后,在你访问外部类的成员时,就是用那个引用来选择外部类的成员。当然这些细节是编译器处理,并且这里的内部类是非static的。
要创建内部类的对象,不是按照本来想的方式,去引用外部类的名字DotNew,而是必须使用外部类的对象来创建内部类的对象。如下面的例子:
public class DotNew{
public class Inner{
}
public static void main(String[] args){
DotNew dn =new DotNew();
DotNew.Inner dni=dn.new Inner();
}
}
但是,如果你创建的是嵌套类(静态内部类),那么就不需要外部类对象引用,如下面的例子:

package innerclassdotnew;

public class InnerDotNew {

InnerDotNew(){
    System.out.println("InnerDotNew");
}

static class StaticInner{
    StaticInner(){
        System.out.println("static inner class");
    }
}
class Inner{
    Inner(){
        System.out.println("normal Inner class");
    }
}

public static void main(String[] args){
    InnerDotNew idn=new InnerDotNew();
    InnerDotNew.Inner dnInner=idn.new Inner();
    /*compile error:
    No enclosing instance of type InnerDotNew is accessible. 
    Must qualify the allocation with an enclosing instance of type InnerDotNew 
    (e.g. x.new A() where x is an instance of InnerDotNew).*/
    //InnerDotNew.Inner dnInner=new Inner();
    InnerDotNew.StaticInner staticInner =new StaticInner();
}

}
/*output/
InnerDotNew
normal Inner class
static inner class

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

创建普通内部类对象与创建嵌套类对象的不同

为什么需要使用内部类? 使用内部类的原因:每个内部类都能独立的继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)的实现,对内部类都没有影响。实际上内部类有效的实现了“多重继承”,就...
  • lin20044140410
  • lin20044140410
  • 2015-12-09 16:05
  • 1120

[ElasticSearch]嵌套对象之嵌套类型

nested类型是一种特殊的对象object数据类型(specialised version of the object datatype ),允许对象数组彼此独立地进行索引和查询。1. 对象数组如何...
  • SunnyYoona
  • SunnyYoona
  • 2017-05-25 19:53
  • 2369

Kotlin编程之伴生对象,抽象类,密封类

Kotlin编程中: 1. 伴生对象; 2. 抽象类; 3. 密封类;
  • hexingen
  • hexingen
  • 2017-05-31 21:10
  • 2339

Java创建内部类对象

要想使用new生成一个内部类的实例,需要先指向一个外部类的实例,也就是先生成外部类的实例, 因为内部类可以调用外部类的成员,当没有外部类实例的时候也就没有这些成员的内存空间, 内部类在实例化的时候,...
  • xidiancoder
  • xidiancoder
  • 2017-02-21 10:12
  • 644

Java使用new和反射实例化内部类对象

java使用new和反射实例化内部类对象 前两天看到一道面试题,是关于内部类的知识,觉得很有意思,现对其详细讲解,绝对原创!~ 这道题是这样的: 根据注释填写(1),(2),(3)处的代码 publi...
  • changlei_shennan
  • changlei_shennan
  • 2017-03-07 16:09
  • 403

如何通过反射构造内部类对象

终于明白怎么通过反射来构造内部类对象了。这里头名堂不少,只能一一道来。  首先在 javalang 包下写一个包含内部类的类: package javalang; public class ...
  • unetman
  • unetman
  • 2015-07-29 14:36
  • 293

通过反射构造内部类对象

首先在 javalang 包下写一个包含内部类的类:   package javalang; public class Outer {     public static class Inne...
  • zliu789
  • zliu789
  • 2011-09-22 17:05
  • 319

面试题_1.线程2.实例化内部类对象

面试题1:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadI...
  • zhaojiangf
  • zhaojiangf
  • 2011-10-12 13:28
  • 948

使用new和反射实例化内部类对象

原文地址: http://hi.baidu.com/811417208/item/1a5d3fc07eb2595bad00ef90 使用new和反射实例化内部类对象 前两天看到一道面试题,是关于内...
  • li346985170
  • li346985170
  • 2013-08-14 22:02
  • 1744

动态创建控件,使用类对象管理并获取控件的值

  • 2015-11-01 23:02
  • 38KB
  • 下载
    个人资料
    • 访问:35687次
    • 积分:1711
    • 等级:
    • 排名:千里之外
    • 原创:132篇
    • 转载:38篇
    • 译文:0篇
    • 评论:9条
    最新评论