别样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的。
- 别样JAVA学习(六)继承下(2.0)内部类上
- 别样JAVA学习(六)继承下(2.1)内部类下
- 别样JAVA学习(六)继承下(2.2)异常上
- 别样JAVA学习(六)继承下(2.3)异常下
- 别样JAVA学习(六)继承下(3.0)包package
- 别样JAVA学习(五)继承上(0.0)继承概述
- 别样JAVA学习(五)继承上(0.2)接口
- 别样JAVA学习(五)继承上(0.3)多态
- 别样JAVA学习(七)多线程上
- 别样JAVA学习(八)String上
- 别样JAVA学习(五)继承上(0.1)抽象类和模板方法模式
- 别样JAVA学习(五)继承上(1.0)Object类equals()
- 别样JAVA学习(五)继承上(1.1)Object类toString()
- 别样JAVA学习(七)多线程下
- 别样JAVA学习(八)String下
- java学习笔记(六)之匿名内部类
- java继承内部类
- java继承内部类
- 基础练习6_杨辉三角
- Head First Html+CSS 笔记(三)
- linux下目录读权限与执行权限区别
- win7 system文件损坏修复办法(刚刚出锅的经验)
- 关于程序命名的问题
- 别样JAVA学习(六)继承下(2.0)内部类上
- IOS网络篇12之Http概述
- 2014年10月10日
- 程序员三十,向左还是向右?
- Android系统移植必读教程。快速移植系统
- 详解Linux内核红黑树算法的实现
- 图像分割
- python中限制进程实例个数实现
- 取Oracle中实现TOP N,选取前几条记录