内部类简析

1、在该外部类以外的地方访问外部类中成员位置上非静态的内部类。

package innerclass;

/*
 * Inner这个类存在与外部类的成员位置上,要访问它的话,其实就是在访问Outer的成员,
 那么就需要创建Outer的对象。拿到Outer的对象之后,就可以访问到Outer类中的所有成员,
 只是这Inner是类,要访问Inner中的成员,还必须创建Inner的对象。

访问方式:
 	Outer out = new Outer();
 	Outer.Inner in = out.new Inner();
 in.show();
 */
public class Demo1 {
	public static void main(String[] args) {
		OuterDemo1.InnerDemo1 in = new OuterDemo1().new InnerDemo1();
		in.showDemo1();
	}
}

class OuterDemo1 {
	int num = 10;

	class InnerDemo1 {
		int x = 100;

		void showDemo1() {
			System.out.println("Inner show x = " + x);
			System.out.println("Inner show num = " + num);
		}
	}
}

总结:因为内部类不是静态,调用是需要先实例外部类再实例内部类才能调用。

===========================================================================================================================

2、在外部类以外的地方访问外部类中成员位置上静态的内部类。

package innerclass;
/*当内部类在外部类的成员位置上,被静态修饰,这时就相当于在访问外部类的静态成员内容。
  访问一个类中的静态成员,可以通过这个类名直接访问。
访问方式:
	Outer.Inner in = new Outer.Inner();
	in.show();

 */
public class Demo2 {
	public static void main(String[] args) {
		OuterDemo2.InnerDemo2 in = new OuterDemo2.InnerDemo2();
		in.show();
	}
}

class OuterDemo2
{
	static int num = 10;

	static class InnerDemo2
	{
		int x = 100;

		void show()
		{
			System.out.println("Inner show x = "+ x);
			System.out.println("Inner show num = "+ num);
		}
	}
}

总结:因为内部类被静态,所以只需要实例外部类就可以打“.”调用内部类了。

===========================================================================================================================

3、在外部类以外的地方访问外部类中成员位置上静态内部类中的静态成员。

package innerclass;
/* 当内部类是在外部类成员位置上被静态了且这个内部类中的成员也被静态了,那么外部类以外的地方
就可以直接使用外部类名.内部类名.内部类成员的方式来访问。
访问方式:
	Outer.Inner.show();
 */
public class Demo3 {
	public static void main(String[] args) {
		OuterDemo3.InnerDemo3.show();
	}
}

class OuterDemo3
{
	static int num = 10;

	static class InnerDemo3
	{
		static int x = 100;

		static void show()
		{
			System.out.println("Inner show x = "+ x);
			System.out.println("Inner show num = "+ num);
		}
	}
}

总结:因为都是静态,所以可以直接打“.”调用。

===========================================================================================================================

4、在内部类的方法中分别访问外部类的成员变量、内部类中的成员变量、内部类中的局部变量

package innerclass;

/*
 * 在内部类的方法中分别访问外部类的成员变量、内部类中的成员变量、内部类中的局部变量
 */
public class InnerTest {
	public static void main(String[] args) {
		new Outer().new Inner().method();
	}
}

class Outer {
	int num = 10;

	class Inner {
		int num = 100;

		void method() {
			int num = 1000;
			System.out.println(Outer.this.num + "应该是10");
			System.out.println(this.num + "应该是100");
			System.out.println(num + "应该是1000");
		}
	}
}

===========================================================================================================================

注意:1、内部类是可以直接访问外部类成员位置上的内容,但外部类是无法访问内部类中的内容。

2、当内部类在外部类的成员位置上,没有被静态修饰时,这个内部类中不能有静态成员。

时间: 2024-08-14 23:55:49

内部类简析的相关文章

RecycleView + CardView 控件简析

今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleView的“列表”样式,Support包默认包含了:LinearLayoutManager  横向或纵向的滚动列表. GridLayoutManager  网格列表.StaggeredGridLayoutManager  交错的网格列表. 2.Adapter负责处理RecycleView的数据和样式 3

[转载] Thrift原理简析(JAVA)

转载自http://shift-alt-ctrl.iteye.com/blog/1987416 Apache Thrift是一个跨语言的服务框架,本质上为RPC,同时具有序列化.发序列化机制:当我们开发的service需要开放出去的时候,就会遇到跨语言调用的问题,JAVA语言开发了一个UserService用来提供获取用户信息的服务,如果服务消费端有PHP/Python/C++等,我们不可能为所有的语言都适配出相应的调用方式,有时候我们会很无奈的使用Http来作为访问协议;但是如果服务消费端不能

JDK框架简析--java.lang包中的基础类库、基础数据类型

题记 JDK.Java Development Kit. 我们必须先认识到,JDK不过,不过一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含量来说.还是在一个层级上,它们都是须要被编译成字节码.在JRE中执行的,JDK编译后的结果就是jre/lib下的rt.jar,我们学习使用它的目的是加深对Java的理解,提高我们的Java编码水平. 本系列全部文章基于的JDK版本号都是1.7.16. 源代码下载地址:https://jdk7.jav

Android -- MediaPlayer内部实现简析

Android -- MediaPlayer内部实现简析 在之前的博客中,已经介绍了使用MediaPlayer时要注意的内容.现在,这里就通过一个MediaPlayer代码实例,来进一步分析MediaPlayer内部是如何运作.实现的:当然这里的分析只截止到底层调用播放器之前,因为播放器这块实在是没搞懂. 我们使用的例子来源于之前MediaPlayer Playback译文中的官方实例: String url = "http://........"; // your URL here

Android RecycleView + CardView 控件简析

今天使用了V7包加入的RecycleView 和 CardView,写篇简析. 先上效果图: 原理图: 这是RecycleView的工作原理: 1.LayoutManager用来处理RecycleView的“列表”样式,Support包默认包含了:LinearLayoutManager  横向或纵向的滚动列表. GridLayoutManager  网格列表.StaggeredGridLayoutManager  交错的网格列表. 2.Adapter负责处理RecycleView的数据和样式 3

并发工具-CyclicBarrier源码简析

CyclicBarrier是循环栅栏的意思,循环的等待多个线程执行任务: <1> 示例代码如下: public class CyclicBarrierTest { public static CyclicBarrier cb = new CyclicBarrier(3, () -> System.out.println("-------开始点名-------")); public static void main(String[] args) { System.out

web应用构架LAMT及tomcat负载简析

Httpd    (mod_jk.so) workers.properties文件 uriworkermap.properties文件 <--AJP1.3--> Tomcat  --> jdk 大致流程:apache服务器通过mod_jk.so 模块处理jsp文件的动态请求.通过tomcat worker等待执行servlet/JSP的tomcat实例.使用 AJP1.3协议与tomcat通信.tomcat有借助jdk解析. 负载就是 多台tomcat.共同解析apache发送的jsp请

CentOS的网络配置简析

我们在进行对CentOS的网络配置时,一般会从IP地址(IPADDR).子网掩码(NETMASK).网关(Gateway).主机名(HOSTNAME).DNS服务器等方面入手.而在CentOS中,又有着不同的命令或配置文件可以完成这些配置操作,接下来,我们将从ifcfg系命令,iproute2系命令以及配置文件3个方面来简析网络配置的方法. 一.ifcfg系命令 ifcfg系命令包括ifconfig,route,netstat和hostname. 1.ifconfig命令 用来配置一个网络接口.

JDK源码简析--java.lang包中的基础类库

题记 JDK,Java Development Kit. 我们必须先认识到,JDK只是,仅仅是一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含量来说,还是在一个层级上,它们都是需要被编译成字节码,在JRE中运行的,JDK编译后的结果就是jre/lib下得rt.jar,我们学习使用它的目的是加深对Java的理解,提高我们的Java编码水平. 本系列所有文章基于的JDK版本都是1.7.16. 本节内容 在本节中,简析java.lang包所包