初探JAVA内部类细节一

定义:

可以将一个类的定义放在另一个类的内部 这就是内部类。--摘自java编程思想

一般实现方式:

public class SimpleInnerClass {

 class Content {

  private int i;

  public int getVlaue() {

   return i;

  }

 }

 class Description {

  private String lable;

  Description(String lab) {

   this.lable = lab;

  }

  public String readLable() {

   return lable;

  }

 }

 public void ship(String lable) {

  Content content=new Content();

  Description description=new Description(lable);

  System.out.println(description.readLable());

 }

 public static void main(String[] args) {

  Parcle2 parcle2 = new Parcle2();

  parcle2.ship("hi");

 }

}

  上面的事例是最普通不过的内部类表达的例子,通过创建内部类对象的引用访问内部类方法

但一般有更通用的做法,通常是在外围类创建一个方法关联内部类的引用;通过这种方式来建立彼此之间的联系。以代码为例:

public class InnerClass {

    class Content {
        private int i;

        public int getVlaue() {
            return i;
        }

    }

    class Description {

        private String lable;

        Description(String lab) {
            this.lable = lab;

        }

        public String readLable() {
            return lable;
        }
    }

    public Content getContentInstance() {

        return new Content();
    }

    public Description getDescriptionIntance(String lable) {

        return new Description(lable);
    }

    public void ship(String lable) {

        Content content = getContentInstance();

        Description description = getDescriptionIntance(lable);

        System.out.println(description.readLable());

        System.out.println(description.readLable());

    }

    public static void main(String[] args) {

        InnerClass parcle2 = new InnerClass();
        parcle2.ship("hi");
        InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部类的非静态方法之外的任意位置访问某个内部类的对象,那么必须通过OutClass.xx

        InnerClass.Description d = parcle2.getDescriptionIntance("hello");
    }

}

有了联系之后内部类就可以访问外围类的所有元素,无论是private类型也可以。

以下代码即是佐证:

public interface Selector {

    boolean end();

    Object current();

    void next();

}
public class Sequence {

    private Object[] items;
    private int next = 0;

    public Sequence(int size) {

        items = new Object[size];
    }

    public void add(Object object) {
        if (next < items.length) {
            items[next++] = object;
        }
    }

     class SequenceSelector implements Selector {

        private int i = 0;

        @Override
        public boolean end() {
            // TODO Auto-generated method stub
            return i == items.length;
        }

        @Override
        public Object current() {
            // TODO Auto-generated method stub
            return items[i];
        }

        @Override
        public void next() {
            if (i < items.length) {
                i++;
            }

        }
    }

    /**
     * 内部类对象只有与外围类对象相关联时才能被创建<p>
     * 构建内部类对象时,需要指向一个其外围类对象的引用;如果编译器访问不到这个引用就会报错
     * @return
     */
    public Selector selector() {

        return new SequenceSelector();
    }

    public static void main(String[] args) {
        Sequence sequence = new Sequence(5);
        for (int i = 0; i < 5; i++) {
            sequence.add(i);
        }
//        Sequence.SequenceSelector c=sequence.selector();
        Selector selector = sequence.selector();
        while (!selector.end()) {
            System.out.println(selector.current());
            selector.next();
        }

    }

}

在此,比较初始化的内部类细节介绍完毕,下一章笔者在继续介绍更深一层次的内部类细节

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #931a68 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; min-height: 14.0px }
span.s1 { color: #931a68 }
span.s2 { color: #000000 }
span.s3 { color: #0326cc }
span.s4 { color: #7e504f }
span.s5 { text-decoration: underline; color: #7e504f }
span.s6 { color: #3933ff }
span.Apple-tab-span { white-space: pre }

原文地址:https://www.cnblogs.com/zhangfengshi/p/9385808.html

时间: 2024-10-31 17:29:08

初探JAVA内部类细节一的相关文章

Java内部类:局部内部类(三)

Java内部类分为4个部分进行阐述,分别为概览.成员内部类.局部内部类和匿名内部类. 在本文中是Java内部类的局部内部类,主要讲局部内部类的概念和在使用局部内部的过程中,需要注意的一个细节. 1.局部内部类的概念 在一个类的方法内部定义另外一个类,那么另外一个类就称作为局部内部类. class OutterClass { void test() { class InnerClass//局部内部类 { } } } 在上述代码中,InnerClass定义在OutterClass的test方法的内部

Java提高篇(三六)-----java集合细节(二):asList的缺陷

在实际开发过程中我们经常使用asList讲数组转换为List,这个方法使用起来非常方便,但是asList方法存在几个缺陷: 一.避免使用基本数据类型数组转换为列表 使用8个基本类型数组转换为列表时会存在一个比较有味的缺陷.先看如下程序: public static void main(String[] args) { int[] ints = {1,2,3,4,5}; List list = Arrays.asList(ints); System.out.println("list'size:&

Java内部类的使用小结

内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的,也可用public,default,protected和private修饰.(而外部顶级类即类名和文件名相同的只能使用public和default). 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类.对于一个名为outer的外部类和其内部定义的名为inner的内部类.编译完成后出现outer.class和outer$inner.class两类.所以内部类的成员变量/方法名可

Java内部类:成员内部类(二)

Java内部类分为4个部分进行阐述,分别为概览.成员内部类.局部内部类和匿名内部类. 在本文中是Java内部类的成员内部类,主要讲述成员内部类的访问方式和一些细节. 成员内部类 成员内部类的访问方式 非static成员内部类 static成员内部类 外部类提供一个方法创建内部类的对象 直接创建内部类的对象 成员内部类要注意的细节 1.成员内部类的访问方式 成员内部类的访问方式,也可以理解为它的创建方式,主要分为两种:第一种是由外部类提供一个方法,用来创建内部类的对象,第二种方法直接创建内部类的对

9)Java内部类(Inner Class)

内部类:不可以有静态数据,静态方法或者又一个静态内部类 内部类的优点:隐藏类的细节,内部类可以声明为私有.内部类可以访问外部类的对象(包括private) 静态内部类:可以有静态数据,静态方法或者又一个静态内部类 局部内部类:定义在一个方法或者一个代码块中的类,作用域为相应代码块 匿名内部类:该类没有名字,一般直接写为(new 接口(..))并返回一个实现了某接口的对象.   为什么需要内部类?     典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象.所以你

java 内部类1

内部类: 常用的情景:一个类要经常访问另一个类的成员. 举个例子: class人 { 血,氧气... class 心脏{...} } 内部类的优势: 成员内类,作为外部类的成员,可以方便随意的访问外部类任意成员. 形式: class Outer { ... class Inner{ ''' } } 分类: 1)成员内部类: 2)局部内部类: 成员内部类访问方式: (孙悟空飞到牛魔王肚子里面想踢哪就踢哪) 1)在其他类中直接创建内部类的对象.(要理解不要背) Outer.Inner inner =

(转载)Java内部类的使用小结

原文摘自:http://android.blog.51cto.com/268543/384844/ 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的,也可用public,default,protected和private修饰.(而外部顶级类即类名和文件名相同的只能使用public和default). 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类.对于一个名为outer的外部类和其内部定义的名为inner的内部类.编译完成

java内部类的作用分析

提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦.学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地

Java内部类

本文是<Java核心技术 卷1>中第六章接口与内部类中关于内部类的阅读总结. Java中的内部类(inner class)是定义在另一个类内部的类.那么内部类有什么用呢?这里主要由三个内部类存在的原因: 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据.即,如果类A中定义了类B,那么类B可以访问类A中的数据,甚至是私有数据,但类A不能访问类B中的私有数据: 内部类可以对同一个包中的其他类隐藏起来.在一个包中,定义一个类时,即使不加上访问权限关键词,这个类也是包内其他类可访问的,不