Java编程思想:嵌套类

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 {
        private int i = 11;
        @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 int x = 10;

        static class AnotherLevle {
            public static void f() {

            }
            static int x = 10;
        }
    }

    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() {

    }
}

原文地址:https://www.cnblogs.com/junjie2019/p/10545676.html

时间: 2024-10-04 12:05:15

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

Java编程思想笔记-类的初始化顺序

1.如果有父类,先初始化父类,然后初始化子类 2.先初始化静态成员变量.静态代码块(static { }包围的代码),然后初始化非静态成员变量.非静态代码块(大括号包围的代码).静态成员变量间.非静态成员变量间按定义顺序初始化. 3.调用构造函数 class Bowl { Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f(int marker) { System.out.p

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

看了老罗罗升阳的专访,情不自禁地佩服,很年轻,我之前以为和罗永浩一个级别的年龄,也是见过的不是初高中编程的一位大牛之一,专访之后,发现老罗也是一步一个脚印的人.别说什么难做,做不了,你根本就没去尝试,也没有去坚持. If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but whatever you do,you have to keep moving forward--Martin

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

33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的长度并不一定同样:仅仅要知道它们有多大以及置于文件何处就可以. 首先.我们有点难以相信RandomAccessFile 不属于InputStream 或者OutputStream 分层结构的一部分.除了恰巧实现了DataInput 以及DataOutput(这两者亦由 DataInputStream

《Java编程思想》学习01:普通类的初始化加载顺序分析

<Java编程思想>学习01:普通类的初始化加载顺序分析 本文根据控制变量法,分析普通类(没有extends,implement)初始化的加载顺序: 参考<Java编程思想>第五章 源码 StaticClass1类 package com.tyj.study.thinkinjava; /* * *@Description: *@Author:TYJ *@Date: create in 2019/7/9 17:22 */ public class StaticClass1 { { S

Java中的嵌套类和内部类

以前看<Java编程思想>的时候,看到过嵌套类跟内部类的区别,不过后来就把它们的概念给忘了吧.昨天在看<数据结构与算法分析(Java语言版)>的时候,又遇到了这个概念,当时就很大的疑惑:嵌套类跟内部类有什么区别?只有是否有关键字static的区别吗? 所以今天找了个时间查了一下两者的详细区别,总结在这篇博客中,既方便自己的复习和学习,也启示他人吧. 1,概念: 定义在一个类内部的类,叫作"嵌套类".嵌套类分为两种:static的和非static的.后者又有一个专

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

现在是够懒得了,放假的时候就想把这篇笔记写出来,一直拖到现在,最近在读<Java编程思想>,我想会做不止这一篇笔记,因为之前面试的时候总会问道一些内部类的问题,那这本书的笔记就从内部类开始说起. 一.为什么需要内部类 1.一个内部类的对象可以访问它的外围类的私有数据. 2.对于同一个包中的其他类来说,内部类能够隐藏起来. 3.使用内部类实现多重继承. 二.内部类重要提要 1.在方法内部或者方法内部的作用域的内部类 eg:方法内部的内部类 public interface InnerInterf

java编程思想-基础

interface: 方法默认为public:成员变量默认 static and final 对象数组的定义:理解? 多接口继承:可以多个接口,但只有一个具体类,具体类在前面 自:多接口继承时,来自不同接口的同名方法怎么处理呢? java重载不能依靠返回类型加以区分(C++可以),也不能依靠checked 异常类型区分 变量定义中的系列定义(逗号隔开):变量名 = 值,其它公共 自:类中,自己引用自己的理解(如,链表节点元素).静态看成动态,编译器的本质实现 内部类和普通类区别:内部类可priv

39.JAVA编程思想之外篇——JAVA图形化设计精简大全一文覆盖

39.JAVA编程思想之外篇--JAVA图形化设计精简大全一文覆盖 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51204948 目录 Java图形化界面设计--容器(JFrame)...1 Java基本类(JFC)...1 l     AWTAbstract Window Toolkit(AWT)抽象窗口工具包... 2 l     Swing包... 2 l     AWT和Swing的区别... 6 Swing基本框

java编程思想总结(二)

java编程思想总结(二) java编程思想总结是一个持续更新的系列,是本人对自己多年工作中使用到java的一个经验性总结,也是温故而知新吧,因为很多基础的东西过了这么多年,平时工作中用不到也会遗忘掉,所以看看书,上上网,查查资料,也算是记录下自己的笔记吧,过一段时间之后再来看看也是蛮不错的,也希望能帮助到正在学习的人们,本系列将要总结一下几点: 面向对象的编程思想 java的基本语法 一些有趣的框架解析 实战项目的整体思路 代码的优化以及性能调优的几种方案 整体项目的规划和视角 其它遗漏的东西

Java编程思想(二) —— 初始化与清理

(一)操作符一章的int类型数据溢出的问题在Java7的版本中仍然存在,而且溢出的结果千奇百怪. public class Hello { public static void main(String[] args) { int i = Integer.MAX_VALUE; System.out.println(i); System.out.println(i*4); System.out.println(i*5); } } 结果分别为2147483647,-4,2147483643. 当应用中