在成员内部类中要注意两点

第一:成员内部类中不能存在任何static的变量和方法;

第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。

接下来是两个例子(关键字:.this .new 内部类隐藏)

[.this] 用于内部类生成[对当前创建该内部类的外部类对象]的引用

[.new] 用于必须使用外部类的对象来创建内部类对象的场合

 class Test001Sub {
public Test001Sub(String s) {
System.out.println(s);
} void f() {
System.out.println("Test001->f()");
} // 一个内部类
public class Test001Inner {
public Test001Sub callOuter() {
return Test001Sub.this;
}
}
} public class Test001 {
public static void main(String[] args) {
Test001Sub t1 = new Test001Sub("new Test001"); // new Test001
Test001Sub.Test001Inner t1Inner = t1.new Test001Inner();
Test001Sub t2 = t1Inner.callOuter();
t2.f(); // Test001->f()
System.out.println(t1.equals(t2)); // true
}
}

protected及private的访问规则依然适用于内部类,外部通过引用不能访问protected及private对象(内部类隐藏)。

可以在外部类内部创建getInstance()方法获得内部类对象。一般推荐这种方法来创建内部类对象。

 interface Contents {
int value();
} interface Destination {
String readLabel();
} class Test002Sub {
protected class Test002Inner1 implements Destination {
private String s; private Test002Inner1(String s) {
this.s = s;
} @Override
public String readLabel() {
return s;
}
} private class Test002Inner2 implements Contents {
private int i = 11; @Override
public int value() {
return i;
}
} public Test002Inner1 instanceInner1(String s) {
return new Test002Inner1(s);
} public Test002Inner2 instanceInner2() {
return new Test002Inner2();
}
} public class Test002 {
public static void main(String[] args) {
Test002Sub test002 = new Test002Sub();
Destination test002Impl1 = test002.instanceInner1("Test002Inner1");
Contents test002Impl2 = test002.instanceInner2();
System.out.println(test002Impl1.readLabel()); // Test002Inner1
System.out.println(test002Impl2.value()); // 11
// 外部通过引用不能访问protected及private对象
// Test002Sub.Test002Inner1 a = test002.new Test002Inner1("a");
// Test002Sub.Test002Inner2 b = test002.new Test002Inner2();
}
}

Java内部类(2):普通的成员内部类的更多相关文章

  1. java 内部类2(成员内部类)

    成员内部类: 特点:在其所在的外部类,的成员函数中,的类. 难点:看注释(涉及到jvm) /*test()执行完毕时,x2从内存中消失,inner的声明周,比x2长,inner还在访问,给人的感觉好像 ...

  2. java内部类和匿名内部类

    内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...

  3. java java 内部类

    java 内部类 一.java内部类: java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性: (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.c ...

  4. 【转】Java 内部类总结

    Java内部类 一. 含义 在Java编程语言里,程序是由类(class)构建而成的.在一个类的内部也可以声明类,我们把这样的类叫做内部类. 二. 作用 实现了更好的封装,我们知道,普通类(非内部类) ...

  5. Java内部类小程序(成员内部类,静态内部类,匿名内部类)

    /** * 测试java内部类(成员内部类,静态内部类,匿名内部类) * 局部内部类不常用,就不写了. * @package :java05 * @author shaobn * @Describe ...

  6. JAVA内部类有关

    最近在看单例模式的实现,看到有一种利用JAVA静态内部类的特性来实现,对于内部类我还真是不了解,遂了解了一下,代码贴上. /** * 内部类分为:成员内部类.局部内部类.匿名内部类和静态内部类. */ ...

  7. Java内部类详解

    Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...

  8. [转] Java内部类详解

    作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  9. Java内部类的一些总结

    作为刚入门Java的小白,这两天看到内部类,这里做一个总结,若有错误,欢迎指正~ 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. 内部类分为: 成员内部类.局部内部类.静态嵌套类. ...

  10. Java内部类的使用小结

    转载:http://android.blog.51cto.com/268543/384844/ Java内部类的使用小结 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可 ...

随机推荐

  1. 牛客练习赛42 C 出题的诀窍 (贡献,卡常)

    牛客练习赛42 C 出题的诀窍 链接:https://ac.nowcoder.com/acm/contest/393/C来源:牛客网 题目描述 给定m个长为n的序列a1,a2,-,ama_1 , a_ ...

  2. Redis入门(三)——主从服务器配置

    当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能.redis提供了一个master,多个sl ...

  3. zabbix4.0搭建

    一.准备工作 1.yum国内源的安装与更新 1.1 备份原repo文件 cd /etc/yum.repos.d/ mkdir repo_bak mv *.repo repo_bak 1.2 在cent ...

  4. tar命令--数据解档(三)解压.tar.gz文件报错 gzip:stdin:not in gzip format

    毕竟是生产..... 提示以下信息:  gzip: stdin: not in gzip format  tar: Child returned status 1  tar: Error is not ...

  5. JDBC (Java DataBase Connectivity)数据库连接池原理解析与实现

    一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...

  6. mysql: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    https://www.cnblogs.com/jpfss/p/9734487.html (mysql.sock错误解决方案)

  7. 单例模式(Singleton)---创建型

    1 单例模式的使用场景 (1)当创建一个对象所占用的资源很多,但同时又需要使用到该对象 (2)当堆系统内的资源要求统一读写时,比如读写的配置信息,此时必须要求创建的实例信息相同 (3)当有多个实例可能 ...

  8. Educational Codeforces Round 34 (Rated for Div. 2) B题【打怪模拟】

    B. The Modcrab Vova is again playing some computer game, now an RPG. In the game Vova's character re ...

  9. ZurmoCRM 可执行代码高危风险报告及修复

    鉴于目前ZumroCRM已经云端化,其开源版本的代码基本没有人维护,也没有地方提交bug清单.但相信国内有一些用户在使用这个开源的版本,下面报告一个ZumoCRM的重大风险点. 风险描述: 当用户登录 ...

  10. Django-批量更新

    1.表结构 class Student(models.Model): """ 学生表(已报名) """ customer = models. ...