码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-11-04 21:29:55      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:产生   val   get   表达式   turn   node   总结   不可   之间   

/**
 * 问题: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();
        }
    }
}


 

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

标签:产生   val   get   表达式   turn   node   总结   不可   之间   

原文地址:https://www.cnblogs.com/z2529827226/p/11794567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!