• java中关于内部类的一些总结


    /**
     * 问题:java学习之---------->java的内部类
     * 首先什么叫内部类:所谓的内部类就是在一个类的内部再定义一个类
     * 这个类就叫做内部类
     * 内部类与类的成员一样有static类、private/public类
     * 还有两种一个是局部内部类、匿名内部类
     * 它们之间的差别只要在于与主类之间的访问方式及权限的问题
     * 比如成员内部类---->既可以访问主类的成员,切主类也能访问它的成员
     * ------------------------------------------------------------------>
     * 同时它们之间可以互相访问的原因也随带了解下:
     * 首先就是:内部类可以访问外部类的原因,是因为在内部类生成的时候系统会给内部类一个
     * 主类的this指针,从而导致内部类可以访问主类的成员
     * 但是主类可以访问内部类的实现就有些不同了-------->因为this指针是随着对象的产生而出现的
     * 而在主类生成的时候,并没有内部类的对象,所以实际上外部类在访问内部类的成员的时候还要new一个内部类的对象再通过对象去访问内部类的成员
     * 此时就是真正体现主类可以访问内部类的解释了------------->所谓的主类可以访问内部类
     * 就是指在主类中new出一个内部类的对象之后,不管内部类中的成员是private还是protected都可以调用
     * ------------------------------------------------------------------>
     * 好了,基本的原理懂了之后,再来介绍另一种内部类--->局部内部类
     * 顾名思义----所谓的局部自然和局部变量一样,通常是在一个函数体中定义的类/变量
     * 局部内部类依旧可以访问外部类的成员------原因依旧如上
     * 但是局部内部类在出了局部的范围之后,就是不可见的了,更不用说外部类还能访问内部类了
     * ------------------------------------------------------------------------------------------------>
     * 在往下走就到了static静态内部类了-------------->和静态变量及方法一样,静态的东西都可以剥夺主体而单独的存在
     * 因为它们的创建时间比主类还要早,这也导致了一个严重的问题---->在静态类的内部没有隐含的主类的this指针
     * 这也直接导致static不能访问主类的成员
     * 但是主类是可以访问静态类的---------->原因自然不言而喻了
     * 补充:如果局部静态类------>那么在双方都互相屏蔽了
     * ------------------------------------------------------------------------------------------>
     * 再往下走就到了我们的关键了---->也是四大内部类的最后一个了-->匿名内部类
     * 首先既然叫匿名------->那么这个类自然是没有名字的了,那么它是如何定义的呢?
     * 请看如下的代码:
     * new 父接口()
     * {
     *    //匿名内部类的实现部分
     * }
     * 参考资料的解释:
     * 定义:父接口的匿名的内部的子类对象
     * 当一个函数的参数是一个接口时,可以使用匿名内部类来实现这个接口来作为它的参数
     * 匿名内部类最后被lambda表达式给代替了---------------->lambda表达式更加简洁
     * 接口需要一个实现类来实现它---------->当我们new 父接口的时候就相当与创建了一个没有名字的类一样
     * 而这个类就叫做匿名内部类-------------------->*******
     * 结束了-----
     * ------------------------------------------------------------------>
     * 下面贴上前面的一部分实现代码
     *class Solution {
        private int num=0;
        
        private static class node
        {
            protected int val;
            private node left;
            private node right;
            
            public int getVal()
            {
                return this.val;
            }
            
            public node(int val)
            {
                this.val=val;
            }
        }
        
        public void print()
        {    
            node space=new node(99);
            System.out.println(space.getVal());
        }
        
        public Solution(int num)
        {
            node space=new node(99);
            
            this.num=num;
        }
        
    }
     */
    再此最后再插入一段对内部类运用的简单的例子吧!就以创建二叉树为例子
    class Tree
    {
        private node root;
        
        private class node
        {
            private int val;
            private node left;
            private node right;
            public node(int val)
            {
                this.val=val;
            }
            public void getNode(int val)
            {
                if(val<this.val)
                {
                    if(this.left==null)
                        this.left=new node(val);
                    else
                        this.left.getNode(val);
                }
                else
                {
                    if(this.right==null)
                        this.right=new node(val);
                    else
                        this.right.getNode(val);
                }
            }
            public void showNode()
            {
                if(this.left!=null)
                    this.left.showNode();
                System.out.print(this.val);
                if(this.right!=null)
                    this.right.showNode();
            }
        }
        public void get(int val)
        {
            if(root==null)
                root=new node(val);
            else
            {
                root.getNode(val);
            }
        }
        public void show()
        {
            if(root!=null)
            {
                root.showNode();
            }
        }
    }


  • 相关阅读:
    go 从入门到精通(二)基本数据类型和操作符
    python爬虫番外篇(一)进程,线程的初步了解
    Go从入门到精通(一)go语言初识
    python爬虫从入门到放弃(九)之 实例爬取上海高级人民法院网开庭公告数据
    python爬虫从入门到放弃(八)之 Selenium库的使用
    python爬虫从入门到放弃(七)之 PyQuery库的使用
    python爬虫从入门到放弃(六)之 BeautifulSoup库的使用
    python爬虫从入门到放弃(五)之 正则的基本使用
    python爬虫从入门到放弃(三)之 Urllib库的基本使用
    openstack网络基本概念(转)
  • 原文地址:https://www.cnblogs.com/z2529827226/p/11794567.html
Copyright © 2020-2023  润新知