别样JAVA学习(六)继承下(2.0)内部类上

来源:互联网 发布:淘宝店铺扣分在哪里看 编辑:程序博客网 时间:2024/05/16 09:00

前面了解了上帝Object类,接下来我们学习内部类,

1、内部类-概述

定义:

从名字上我们直观分析,就是一个类我们直接定义到另一个类里面,

对里面那个类就称为内部类(内置类,嵌套类)。

好吧,那么我们现在就写一个内部类出来感受一下,


为什么:

内部类不放也可以,但是你放进去有个好处,

你有没有发现如果你放到外面来的话,我想访问访问Outer里面的x变量、method()方法,

我是不是需要在Inner类当中创建Outer对象,才能访问Outer中的资源。

class Outer{int x=3;void method(){System.out.println(x);}}class Inner{Outer out=new Outer();        void function(){System.out.println("inner :"+out.x);}}


放进Outer类,Inner访问x变量是不是可以直接访问。就像孙悟空

要想访问牛魔王的心脏,是不是要先找到牛魔王,再找到其心脏。

是不是牛魔王.get心脏方法。但当孙悟空跑到牛魔王肚子之后,

是不是可以直接访问牛魔王心脏。

这么做:
class Outer{private int x=3;class Inner{void function(){System.out.println("inner :"+x);//无公私有都可以访问}}void method(){System.out.println(x);}}
这也就是内部类特点。



2、内部类访问规则

内部类的访问规则:

1,内部类可以直接访问外部类中的成员,包括私有。

2,外部类要访问内部类呢,必须建立内部类对象。

class Outer{private int x=3;class Inner{void function(){System.out.println("inner :"+x);//无公私有都可以访问}}void method(){Inner in=new Inner();                in.function();}}


我们其他类可不可以直接访问内部类中成员呢?这样,

class InnerClassDemo{public static void main(String[] args){Outer.Inner in=new Outer().new Inner();in.function();}}

一般不这么干,但面试可能会问。


class Outer{private int x=3;class Inner{int x=4;void function(){int x=6;System.out.println("inner :"+x);}}void method(){System.out.println(x);}}
打印出来的是6,内部有就不出去找;如果要得出4,x前面加this;

3呢?Outer.this.x。

原理:内部类之所以可以直接访问外部类成员,是因为持有外部类的引用,格式:外部类名.this。


访问格式:

1,当内部类定义在外部类的成员位置上,而且非私有。

可以在外部其他类中,直接建立内部类对象。

格式:

        外部类名.内部类名   变量名=外部类对象.内部类对象;

Outer.Inner in=new Outer().new Inner();

静态内部类

2,当内部类在成员位置上,就可以被成员修饰符所修饰。

        比如,private:将内部类在外部类中进行封装。

                   static:内部类就具备了静态特性。

                               当内部类被静态修饰后,只能访问外部类中的static成员,

                               当外部类其他成员都是static时,不涉及特有数据。

                               但是静态内部类出现不多,因为有访问局限。

                              

                               在外部其他类中,我们如何访问静态内部类的非静态成员呢?

                               此时不需对象,类名可直接调用。

new Outer.Inner().function();
                                在外部其他类中,我们如何访问静态内部类的静态成员呢?
new Outer.Inner().function(); 或 Outer.Inner.function();

         注意,当内部类中定义了静态成员,该内部类必须是static的。

                    当外部类中的静态方法访问内部类时,内部类也必须是static的。


0 0
原创粉丝点击