zoukankan      html  css  js  c++  java
  • 内部类一 :内部类对象依赖外部类对象

     在一个类的内部定义一个类(没有被static关键字修饰),这个类内部的类就是内部类。外部类的权限只有默认访问权限或者包访问权限。

    如果有别的访问权限修饰符,会报如下的编译器错误:

    Illegal modifier for the class Test; only public, abstract & final are permitted

    而内部类 可以被public protected private三个修饰符修饰的

    如果这个内部类被static 关键字修饰了,那么称之为 嵌套类

    内部类可以访问外部类的实例成员和实例方法

    package chapter10;
    
    public interface Selector {
        boolean end();
        Object current();
        void next();
    }
    package chapter10;
    
    public class Sequence {
    
        private Object[] items;
        private int next = 0;
    
        public Sequence(int size) {
            items = new Object[size];
        }
    
        public void add(Object x) {
            if (next < items.length) {
                items[next++] = x;
            }
        }
    
        private class SequenceSelector implements Selector {
            private int i;
    
            @Override
            public boolean end() {
                return i == items.length;
            }
    
            @Override
            public Object current() {
                //在内部类中可以直接访问外部类的对象,
                return items[i];
            }
    
            @Override
            public void next() {
                if (i < items.length) {
                    i++;
                }
            }
    
        }
        
        public Selector selector() {
            return new SequenceSelector();
        }
        
        public static void main(String[] args) {
            Sequence sequence=new Sequence(10);
            for(int  i=0;i<10;i++) {
                sequence.add(Integer.toString(i));
            }
            
            Selector selector = sequence.selector();
            
            while(!selector.end()) {
                System.out.print(selector.current()+" ");
                selector.next();
            }
            
        }
    
    }

    当某个外围类的对象撞见一个内部类对象时,此内部类对象必定会秘密地捕获一个指向外部类的对象的引用。然后用这个捕获的引用来访问外围类的成员。捕获外围类引用的细节都由编译器来操作。内部类的对象只能在与其外围类的对象相关联的情况下才能被创建。构建内部类对象时,需要一个指向外围类对象的引用,如果编译器访问不到这个引用就会报错。

    必须创建外部类对象之后才能创建内部类

    package chapter10;
    
    public class DotNew {
        public class Inner{
            
        }
        
        public static void main(String[] args) {
            DotNew dn=new DotNew();
            
            DotNew.Inner dni=dn.new Inner();//通过.new关键字创建内部类对象
        }
    }

    在拥有外部类对象之前时不可能创建内部类对象的,因为内部类对象会暗暗地连接到创建它的外部类对象上。但是如果创建的是嵌套类(静态内部类),那么嵌套类的对象不需要引用外部类对象的引用

  • 相关阅读:
    Codeforces Round #481 (Div. 3)题解
    陕西师范大学第七届程序设计竞赛网络同步赛题解
    Codeforces Round #479 (Div. 3)题解
    2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解
    江西财经大学第一届程序设计竞赛题解
    2018年湘潭大学程序设计竞赛G又见斐波那契
    2018年长沙理工大学第十三届程序设计竞赛题解
    JDBC连接SQL server2014代码
    数据定义伪指令语句
    JDBC连接数据库
  • 原文地址:https://www.cnblogs.com/cplinux/p/13083586.html
Copyright © 2011-2022 走看看