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

Posted z2529827226

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
        }
    }
}


 

以上是关于java中关于内部类的一些总结的主要内容,如果未能解决你的问题,请参考以下文章

Java中关于泛型集合类存储的总结

Java中关于接口的总结

java 中关于继集合类的整理

Android中关于内部存储的一些重要函数

java内部类总结

java内部类总结