婚姻是主宰一生幸福的关键 当前位置:首页>婚姻是主宰一生幸福的关键>正文

婚姻是主宰一生幸福的关键

发布时间:2019-03-21

原标题:【Java入门提高篇】Day6 Java内部类——成员内部类

“停!”纪太虚打断了这女子的话:“虽然我不知道你是哪个门派的弟子,但是我知道你一定不是普通人,这种英雄救美桥段只有在戏文里才会出现。”

杨绛《一百岁感言》:世界是自己的,与他人毫无关系

叶扬看到乐天的脸色变得凝重起来,他也是缓缓的收敛起笑意,郑重的问道:“什么消息?”
这小岛上虽然荒无人烟,但是要弄点吃的却不难。丽萨娜虽然是海族公主,但除了鱼她没吃过别的东西,想必这路上的走兽对她来说就是美味了。

发言的过程有些漫长,但是唐欣却很紧张!因为做为全国高考状元的得主,他也要发言。而且他的发言排名第三,仅次于吴市长以及海师高中校长发言之后。

  内部类是什么,简单来说,就是定义在类内部的类(一本正经的说着废话)。

  一个正经的内部类是长这样的:

public class Outer {
    class Inner{
    }
}

  这是为了演示而写的类,没有什么luan用,可以看到Inner类置于Outer类的内部。

  那为什么要大费周章的在类内部定义一个类呢?不能在类外部定义类吗?内部类跟外部类有什么关系?

  确实,很多时候,在外部单独定义一个类确实更加方便,也更加通用,但内部类的存在自然有其存在的道理,内部类作为寄生在外部类的类,可以自由访问内部类的所有的属性和方法,有没有联想其我们之前说的继承,子类可以继承父类的属性和方法,但是内部类有着更高的访问权限,不仅是public属性,protected属性,就连private属性也可以轻松访问,这样就不会让修饰符限制你的想象了(手动滑稽)。

  内部类也分很多种:成员内部类、静态内部类、局部内部类、匿名内部类。今天先来说说第一种:成员内部类。

  成员内部类是最简单粗暴的内部类,上面那个栗子中的Inner类就是成员内部类,相比普通的类,成员内部类是不能有static修饰的成员或者方法的,因为成员内部类是寄生在外部类中的,所以必须先有外部类实例才能有成员内部类。在外部创建内部类对象时,姿势也不太一样,看起来像是这个样子的:

public class Test {
    public static void main(String[] args) {
        Outer.Inner inner = new Outer().new Inner();
    }
}

  在内部类中可以访问外部类的方法和属性,外部类也可以访问内部类的方法和属性,举个栗子:

public class Outer {
    private int num;
    private Inner inner;

    Outer(){
        num = 1;
        inner = new Inner();
    }

    public void print(){
        System.out.println("Outer.print()");
        System.out.println(inner.num);
        System.out.println(num);
    }

    class Inner{
        private int num;

        Inner(){
            num = 2;
        }

        public void print(){
            System.out.println("Inner.print()");
            System.out.println(this.num);
            System.out.println(Outer.this.num);
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        outer.print();
        inner.print();
    }
}

  输出如下:

Outer.print()
3
1
Inner.print()
3
1

  外部类访问内部类的姿势是先生成内部类实例,然后就能访问所有方法和属性,内部类访问外部类方法和属性则直接使用Outer.属性/方法名 即可。

  在这个栗子中,我们可以看到内部了Inner可以对外围类Outer的属性进行无限制的访问,尽管它是private修饰的。因为当我们在创建某个外围类的内部类对象时,会往内部类传入一个外部类的引用,只要我们在访问外部类的成员时,就会用这个引用来选择外围类的成员。引用内部类的时候,需要使用Outer.Inner这样的形式来声明,而不能直接使用Inner来声明(除了在Outer类中),当需要使用到内部类的时候,还是推荐使用getInnerInstance的方式来获取,特别是当内部类只有无参构造器的时候:

public class Outer {
    private int num;
    private Inner inner;

    Outer(){
        num = 1;
        inner = new Inner();
    }

    public Inner getInnerInstance() {
        return new Inner();
    }

    public void print(){
        System.out.println("Outer.print()");
        System.out.println(inner.num);
        System.out.println(num);
    }

    public class Inner{
        private int num;

        Inner(){
            num = 2;
        }

        public void print(){
            System.out.println("Inner.print()");
            System.out.println(this.num);
            System.out.println(Outer.this.num);
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Outer outer = new Outer();
        Outer.Inner inner = outer.getInnerInstance();
        outer.print();
        inner.print();
    }
}

  这样的话,就能更好的封装了。

  当然,内部类跟外部类还有一个很重要区别:内部类可以用private修饰,而外部类是不能使用private修饰的。如果内部类仅仅在类内部使用时,使用private修饰后,就可以更好的隐藏内部信息。

  至此,内部类的第一部分讲解完毕,欢迎大家继续关注。

 

编辑:戏北海顺

发布:2019-03-21 03:45:47

当前文章:http://dehangcd.com/house/mwf0ljp7xt.html

怎么会狠心伤害我 一篇文章看懂Android学习最佳路线 【双章书法】系列:张肇达书法 - 黄胤然诗联 让你的努力,配得上你的梦想 你这么说话会没有朋友的 这类碧池碰不得 【心理求助】让内心变强大的训练方法是什么 低调做人,高调示爱

90785 77010 80225 29931 81098 56182 88326 47275 57247 86568 92719 31772 94492 44839 50799 28788 96538 71012 20872 52563

责任编辑:伯马陵