`
mmdev
  • 浏览: 12933615 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

java内部类访问规则

 
阅读更多
public class ClassOuter {
private static int x = 3;


/**
* 放里边,有啥好处?将ClassInner放在外面,我们如果想访问ClassOuter中的成员变量,
* 就不得不创建一个ClassOuter对象。孙悟空想访问牛摩魔王的心脏,就得先找到牛魔王,
* 再找到其心脏,牛魔王.get心脏()。当孙悟空跑到牛魔王的肚子里去了之后,就可以直 接访问牛魔王的心脏。
*
* 内部类的访问规则: 1、内部类可以直接访问其外部类的成员,包括私有成员。为什么呢?
* 之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,该引用 为: 外部类名.this
* 2、牛魔王想访问孙悟空就没那么方便了。外部类要访问 内部类,必须建立内部类对象 。
*
* 注意:1、当外部类中定义了静态成员,该内部类必须是静态的; 2、当外部类的中静态方法访问内部类时,内部类也必须是静态的
*/


/*
* 这个内部类在外部类成员的位置上,私有修饰(唯的一类可以被private修饰的情况)
*
* public、protected、private、static 是对成员元素(如:成员变量,成员方法,成员内部类)的
* 修饰符,而不能用在方法中的局部元素(如:方法中的局部内部类)
*/


// 成员内部类
public class ClassInner { // private class ClassInner
int x = 4;


void innerShow() {
int x = 5;
System.out.println("inner show:" + x);
System.out.println("inner show:" + this.x);
System.out.println("inner show:" + ClassInner.this.x);
System.out.println("inner show:" + ClassOuter.this.x);
}
}


static class StaticInner {
// 方法是非静态的,所以要通过对象来调用
void InnerShow() {
// Cannot make a static reference to the non-static field
// x,因为静态没有this对象
System.out.println("static inner show " + x);
}


static void staticInnerShow() {
System.out.println("static inner static show " + x);
}
}


public void show() {
ClassInner inner = new ClassInner();
inner.innerShow();


new StaticInner().InnerShow();
}


public void display(final int z) {
//局部内部类只能访问被final修饰的局部变量,这是一个规则,可为什么呢?
final int y = 4;
// 局部内部类 不能被static,private等修饰成员的关键字修饰,所以局部内部类里面不能有静态方法
class Inner {
/**
* 如果它是静态的方法,那内部类就要是static,而局部内部类不成被修饰成员的修饰符修饰
* */
void show() {
System.out.println("inner class in display " + x);
/*
* Cannot refer to a non-final variable y inside an inner class
* defined in a different method
*/
System.out.println("inner class in display " + y);
System.out.println("inner class in display " + z);
}
}
//要在类的后面创建对象
new Inner().show();
}

//匿名内部类

}


class ClassTest {
public static void main(String[] args) {
ClassOuter outer = new ClassOuter();
outer.show();
System.out.println("---------------------");
// 直接访问内部类中的成员? ---------外部名.内部名
ClassOuter.ClassInner inner = new ClassOuter().new ClassInner();
// 直接访问静态内部类的中的成员
new ClassOuter.StaticInner().InnerShow();
ClassOuter.StaticInner.staticInnerShow();

new ClassOuter().display(7);
}
}


/**
* 当描述事件时,事物的内部还有事物,该事物用内部类来描述。因为内部事物在使用外部事物的内容。
* */
分享到:
评论

相关推荐

    Java内部类访问规则.doc

    Java内部类访问规则.doc

    详解java内部类的访问格式和规则

    在本文里我们给大家详细分享了关于java内部类的访问格式和规则知识点内容,有兴趣的朋友们学习下。

    (超赞)JAVA精华之--深入JAVA API

    1.2 深入理解嵌套类和内部类 1.2.1 什么是嵌套类及内部类? 1.2.2 静态嵌套类 1.2.3 在外部类中定义内部类 1.2.4 在方法中定义内部类 1.2.5 匿名内部类 1.2.6 内部类使用的其它的问题 1.3 文件和流 1.3.1 什么是数据...

    JAVA SE学习精华集锦

    1.2 深入理解嵌套类和内部类 47 1.2.1 什么是嵌套类及内部类? 47 1.2.2 静态嵌套类 48 1.2.3 在外部类中定义内部类 48 1.2.4 在方法中定义内部类 49 1.2.5 匿名内部类 49 1.2.6 内部类使用的其它的问题 50 1.3 文件...

    疯狂JAVA讲义

    学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在...

    java 编程入门思考

    7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 7.7.2 继承和finalize() 7.7.3 构建器内部的多形性方法的行为 7.8 通过继承进行设计 7.8.1 纯继承与扩展 7.8.2 下溯造型与运行期类型...

    java三大特性说明

     Private:只有自己类内部能访问,其他部分无论包内外,父子类都不能访问  Final:修饰属性:常量,值不能被修改  要么在声明时候赋值,要么在构造方法中赋值,两次机会只能选取一次。  修饰方法 :final方法子类...

    Java初学者入门教学

    7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 7.7.2 继承和finalize() 7.7.3 构建器内部的多形性方法的行为 7.8 通过继承进行设计 7.8.1 纯继承与扩展 7.8.2 下溯造型与运行期类型...

    java联想(中文)

    7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 7.7.2 继承和finalize() 7.7.3 构建器内部的多形性方法的行为 7.8 通过继承进行设计 7.8.1 纯继承与扩展 7.8.2 下溯造型与运行期类型...

    java初学者必看

    10.3.3 成员内部类的修饰符 10.4 方法内部类 10.5 匿名内部类 10.5.1 继承式 10.5.2 接口式 10.5.3 参数式 10.6 静态嵌套类 10.7 内部类的继承 10.8 本章习题 第11章 线程 11.1 线程基础 11.1.1 什么是...

    JAVA上百实例源码以及开源项目

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    Java优化编程(第2版)

    1.11.1 访问实例与类中变量的规则 1.11.2 引用类中的静态变量与方法的 …… 小结 第4章 java核心类与性能优化 4.1 散列表类与性能优化 4.1.1 线程同步散列表类 4.1.2 设置arraylist初始化容量 4.1.3 arraylist与...

    21天学通Java-由浅入深

    232 11.7 习题 232 第12章 内部类(精彩视频:71分钟) 234 12.1 非静态内部类 234 12.1.1 创建非静态内部类 234 12.1.2 在外部类中访问内部类 235 12.1.3 在外部类外访问内部类 236 12.1.4 在内部类中访问外部类 ...

    JAVA上百实例源码以及开源项目源代码

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    JAVA_Thinking in Java

    7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 7.7.2 继承和finalize() 7.7.3 构建器内部的多形性方法的行为 7.8 通过继承进行设计 7.8.1 纯继承与扩展 7.8.2 下溯造型与运行期类型...

    java基础案例与开发详解案例源码全

    3.3.3 Java标识符命名规则41 3.3.4 关键字42 3.3.5 常量42 3.4 运算符43 3.4.1 算术运算符43 3.4.2 赋值操作符45 3.4.3 关系操作符47 3.4.4 逻辑操作符48 3.4.5 位操作符49 3.4.6 移位运算符49 3.4.7 其他操作符50 ...

    java 面试题 总结

    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...

    Thinking in Java简体中文(全)

    7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 7.7.2 继承和finalize() 7.7.3 构建器内部的多形性方法的行为 7.8 通过继承进行设计 7.8.1 纯继承与扩展 7.8.2 下溯造型与运行期类型...

Global site tag (gtag.js) - Google Analytics