public class Test {
    public static void main(String[] args) {
//        Parcell11.test();
//        ClassInterface.Test.test();
        TestBed.Tester.test();
    }
}

/*
    嵌套类和普通的内部类还有一个区别。普通的内部类的字段和方法,只能放在类的外部
    层次上,所以普通的内部类不能有static数据和static字段,也不能包含嵌套类。但
    是嵌套类可以包含这些东西
 */
interface Content {
    int value();
}
interface Destination {
    String readLabel();
}
class Parcell11 {
    private static class ParcelContents implements Content {
        ;
        @Override
        public int value() {
            return i;
        }
    }

    protected static class ParcelDestination implements Destination{
        String lable;

        public ParcelDestination(String lable) {
            this.lable = lable;
        }

        @Override
        public String readLabel() {
            return null;
        }

        //嵌套类中,允许有静态区域
        public static void f() {

        }
        ;

        static class AnotherLevle {
            public static void f() {

            }
            ;
        }
    }

    public static Destination destination(String s) {
        return new ParcelDestination(s);
    }

    public static Content content() {
        return new ParcelContents();
    }

    public static void test() {
        Content c =content();
        Destination d = destination("HHH");
    }
}

/*
    需求:
        如果你想创建某些公共代码,使得它们可以被某个接口的所有不同实现所公用,那么使
        用接口内部的嵌套类会显得很方便。放在接口中的任何类都自动地是public和static
        的。因为类是static的,只是将嵌套类置于接口的命名空间内,这并不违反接口的规则
        。你甚至可以在内部类中实现其外围接口。
 */
interface ClassInterface {
    void howdy();

    class Test implements ClassInterface {

        @Override
        public void howdy() {
            System.out.println("Howdy!");
        }

        public static void test() {
            new Test().howdy();
        }
    }
}

/*
    需求:
        我曾在这本书建议过,在每个类中都写一个main()方法,用来测试这个类。这样做有一个
        缺点,那就是必须带有已编译过的额外代码。但是可以使用嵌套来放置测试代码,嵌套类会
        生成一个字节码文件,发布时将字节码文件删除就好了
 */
class TestBed {
    public void f() {
        System.out.println("f()");
    }

    public static class Tester {
        public static void test() {
            TestBed t = new TestBed();
            t.f();
        }
    }
}

/*
    笔记:
        一个内部类被嵌套多少层并不重要——它能透明的访问所有它所嵌入的外部类的所有成员方法。
        同时,在不同的类里创建多层嵌套的内部类对象时,.new语法能产生正确的作用域,所以不必
        在调用构造器时限定类名。 

            ——这跟嵌套类没有半毛钱的关系
 */
class A1 {
    private void f() {

    }

    class A2 {
        private void g() {
            f();
        }

        private class A3 {
            private void h() {
                f();
                g();
            }
        }
    }
}

//测试一下如果外围类有同名方法会怎样
class B1 {
    private void f() {
        System.out.println("B1");
    }

    class B2 {
        private void f() {
            f();
            System.out.println("B2");
        }

        private class B3 {
            private void f() {
                f();
                f();
                System.out.println("B3");
            }
        }
    }
}

class MultiNestingAccess {
    public static void test() {

    }
}

Java编程思想:嵌套类的更多相关文章

  1. java编程思想-复用类总结

    今天继续读<java 编程思想>,读到了复用类一章,看到总结写的很好,现贴上来,给大家分享. 继承和组合都能从现有类型生成新类型.组合一般是将现有类型作为新类型底层实现的一部分来加以复用, ...

  2. java编程思想-复用类(2)

    如果java的基类拥有某个已被多次重载的方法名称,那么在导出类中重新定义该方法名称并不会屏蔽其在基类中的任何版本(这一点与C++不同) class Homer { char doh(char c) { ...

  3. java编程思想-复用类

    /* 一个文件中只能有一个public类 并且此public类必须与文件名相同 */ class WaterSource { private String s; WaterSource() { Sys ...

  4. 33.JAVA编程思想——JAVA IO File类

    33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的 ...

  5. Java编程思想(四) —— 复用类

    看了老罗罗升阳的专訪,不由自主地佩服,非常年轻,我之前以为和罗永浩一个级别的年龄.也是见过的不是初高中编程的一位大牛之中的一个,专訪之后.发现老罗也是一步一个脚印的人. 别说什么难做,做不了.你根本就 ...

  6. Java编程思想读书笔记之内部类

    现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始 ...

  7. Java编程思想学习(八) 内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类的定义是简单的,但是它的语法确实很是复杂,让人不是很好理解.下面就内部类做一个小结. 一.内部类的分类 总的来讲内部类分为普通内部类,匿 ...

  8. Java编程思想 (1~10)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...

  9. Java中的嵌套类和内部类

    以前看<Java编程思想>的时候,看到过嵌套类跟内部类的区别,不过后来就把它们的概念给忘了吧.昨天在看<数据结构与算法分析(Java语言版)>的时候,又遇到了这个概念,当时就很 ...

  10. Java编程思想(前十章)

    Java编程思想 有C++编程基础的条件下, 前10章可以快速过一下,都是基本语法,不需要花太多时间. 着重中后段的一些章节,类型信息.泛型.容器.IO.并发等. 中文翻译版 阅读地址 对于一个架构师 ...

随机推荐

  1. JVM的几个介绍

    关于jvm内存的几点 jvm在运行时分为方法区(Method Area) .虚拟机栈(VM Stack).本地方法栈(Native Method Stack).堆 (Heap).程序计数器 (Prog ...

  2. 类选择器和所作用的标签一起写为什么不起作用? - CSDN博客

    原文:类选择器和所作用的标签一起写为什么不起作用? - CSDN博客 HTML代码: css样式: 这不是将样式作用于circle类下的有current类的li标签吗?为什么不起作用? 原因: 选择器 ...

  3. linux下mysql定时备份

    1. 在服务器上建立备份文件的存放文件夹 sudo mkdir /usr/local/dbbackup 2. 编写备份脚本 vi dbbackup.sh 在里面编写如下内容 mysqldump -ur ...

  4. Qt中使用QSqlDatabase::removeDatabase()的正确方法 good

    如果你用过Qt的QSqlDatabase的话,多半会对下面的警告信息感兴趣: QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_defau ...

  5. FireMonkey下的异形窗体拖动(需要使用FmxHandleToHwnd函数转化一下句柄)

    DelphiXE2 Firemoney FMX 的窗体不只是为windows的, 所以很多功能都没有了. 最常见的就是拖拽了 先看 VCL时代 一个经典拖动代码 ReleaseCapture(); S ...

  6. 函数式编程里的Materialization应该翻译成什么?

    Materialization是函数式编程里的一个专业术语, 用于特指函数式编程中查询被实际执行并生成结果的这一过程. 首先, 搜了一下中文资料, 暂时没有对该词的中文翻译,  CSDN\博客园\阿里 ...

  7. String的所有方法以及解释

    capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串 c ...

  8. 14 CSS权重深入

    <!-- 继承说明: (1)进行样式选择时,不指定标签的话,该选择器是继承来的. (2)继承的选择器的优先级为0,和标签选择器的优先级无可比性. --> <!DOCTYPE html ...

  9. Scala 学习之路(二)—— 基本数据类型和运算符

    一.数据类型 1.1 类型支持 Scala 拥有下表所示的数据类型,其中Byte.Short.Int.Long和Char类型统称为整数类型,整数类型加上Float和Double统称为数值类型.Scal ...

  10. Java NIO 学习笔记(一)----概述,Channel/Buffer

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...