成员内部类和静态内部类

</pre><pre name="code" class="java">public class Test {
	//java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。
	//其中成员内部类和静态嵌套类需要在外部类中调用。调用的时候比较麻烦,本文主要针对这两种内部类外部调用做分析。
	//方法内部类只能在定义该内部类的方法内对其实例化;匿名内部类定义的时候直接创建该类对象。

	//成员内部类Test1
 	class Test1 {
  	int i;
  	public Test1(int i) {
   		this.i = i;
   		System.out.println("内部类1测试");
  	}
  	public int fun1() {
   		return i;
  	}
 	}

 	//成员内部类Test2
 	class Test2 {
  	int i;
 	 	public Test2(int i) {
   		this.i = i;
   		System.out.println("内部类2测试");
  	}
  	public int fun2() {
   		return i;
  	}
 	}

 	//静态内部类。静态内部类中可以定义静态或者非静态的成员。//静态内部类不能访问外部类的非静态成员或非静态方法。
 	static class Test3 {
 		public int i = 4;
 		public static int m = 3;
 		public static void fun3() {
 			System.out.println(m);
 		}
 		public void fun4() {
 			System.out.println(m);
 		}
 	}

 	//非静态方法可以调用静态或者非静态的变量或者方法。

 	public void fun5() {

 		//非静态方法中,对于成员内部类:可以“new外部类.new内部类"或者“new内部类”来访问。
 		//非静态方法中new出来的成员内部类的类型可以是“外部类.内部类”或者“内部类”。
  	Test.Test1 m = new Test1(5);
  	System.out.println(m.fun1());
  	Test2 n = new Test().new Test2(10);
  	System.out.println(n.fun2());

 		//非静态方法中,对于静态内部类:可以“内部类.XX”或者“外部类.内部类.XX”或者“new内部类”来访问,不可以“new外部类new内部类”来访问
  	//非静态方法中访问静态内部类中的静态成员或者静态方法用“内部类.XX”访问
  	Test3.fun3();
  	System.out.println(Test.Test3.m);
  	//非静态方法中访问静态内部类中的非静态成员或者非静态方法用“new 静态内部类”,然后访问
  	new Test3().fun4();
  	System.out.println(new Test3().i);
  	//new出来的静态内部类的类型可以是“外部类.内部类”或者“内部类”
  	Test.Test3 tt = new Test3();
  	tt.fun3();
  	Test3 ttt = new Test3();
  	ttt.fun4();
 	}

 	//“静态方法中访问成员内部类的操作”与“静态方法中访问非静态成员或者非静态方法的操作”类似,“new 外部类.new 成员内部类”,然后访问。
 	//"静态方法中访问静态内部类的操作"与"静态方法中访问静态成员或者静态方法的操作"类似,可直接通过"静态内部类.XX"调用。
 	//不过静态内部类可以定义非静态成员和方法,如果要访问静态内部类中的非静态成员或者非静态方法,则需要“new 静态内部类”,然后访问。
	public static void main(String[] args) {

 		//不能如下访问成员内部类,必须先new外部类
 		//Test.Test1 t4 = new Test1(8);

  	Test.Test1 t1 = new Test().new Test1(8);
  	System.out.println(t1.fun1());

  	//main静态方法中new出来的成员内部类t2的类型可以为“外部类.内部类”,也可以为“内部类”
  	Test2 t2 = new Test().new Test2(7);
  	System.out.println(t2.fun2());

 		Test t3 = new Test();
  	t3.fun5();

  	//通过静态内部类名直接调用静态变量或者静态方法
 		Test3.fun3();
  	System.out.println(Test.Test3.m);

   	//访问静态内部类中的非静态成员或者非静态方法需要new静态内部类,然后访问
   	System.out.println(new Test3().i);
   	new Test3().fun4();

   	//报异常
   	//Test3.fun4();

   	//main静态方法中new出来的静态内部类tt的类型可以为“外部类.内部类”,也可以为“内部类”
   	Test3 tt = new Test3();
   	System.out.println(tt.i);
   	Test.Test3 ttt = new Test3();
   	//静态内部类中的静态方法也可以“new静态内部类.静态方法()”如此访问。
   	ttt.fun3();

  }

}

成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己。静态内部类不能访问外部类的非静态成员或非静态方法。

普通内部类不能有static数据和static属性,也不能包含嵌套类,但嵌套类可以。而嵌套类不能声明为private,一般声明为public,方便调用.

一个java文件中只能有一个public类,但是一个类里面可以有多个public内部类。

总结:

静态内部类,我们只要"new 内部类.xx"就不会出错(不过一般需要静态内部类的时候都针对内部类里面的静态成员或者静态方法而言,会“内部类.XX")

成员内部类,我们只要“new外部类.new内部类”就不会出错。

new出来的内部类的通用类型只要是“外部类.内部类”就不会出错

成员内部类和静态内部类

时间: 2024-08-18 18:16:09

成员内部类和静态内部类的相关文章

Java学习(十六)、成员内部类,静态内部类,匿名内部类,局部内部类

定义:将一个类定义在另一个类的内部.内部的类称为内部类; public class Outer{ class inner{ //省略 } } 特点: ①   内部类可以很好的实现隐藏,可以使用protected,private修饰符; ②   内部类可以直接访问外部类的所有成员,包括私有成员; ③   外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才能访问; ④   内部类可以解决一些问题,比如间接的去实现多继承.可以避免修改接口而实现同一个类中两种同名方法的调用; 成员内部类及应用

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

1 /** 2 * 测试java内部类(成员内部类,静态内部类,匿名内部类) 3 * 局部内部类不常用,就不写了. 4 * @package :java05 5 * @author shaobn 6 * @Describe : 7 * @Time: 2015-9-6 下午8:32:38 8 */ 9 public class TestInner { 10 11 /** 12 * @author shaobn 13 * @Describe : 14 * @param args 15 * @Time

Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液.跳动),显然,此处不能单方面用属性或者方法表示一个心脏了,而需要一个类,但是这个类要依赖于人这个类存在(因为心脏不能脱离人体而存活,当然不考虑现今社会的发达科技,只从正常情况下来说),所心脏以需要写在人类的内部.内部类就相当于其中的某个器官之一. 首先看看什么是内部类:在类的内部定义另一个类.没错

【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

课程回顾: 接口:1.属性:public\static\final2.方法:public\abstract 多态:1.静态化(编译时)多态重载2.动态化(运行时)多态重写对象转型 1.向上转型 2.向下转型 今日内容:内部类:定义在类的内部的类1.成员内部类格式:[修饰符] class 类名 { }内部不能有静态的属性和方法,可以访问外部类的属性,也可以调用外部类的方法 在静态方法中的使用格式:外部类 外对象=new 外部类();成员内部类 对象名=外对象.new 成员内部类(); 2.静态内部

java内部类之成员内部类、静态内部类

内部类其实就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液.跳动)显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类,而心脏又在人体当中,正如同是内部类在外部内当中 广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一下这四种内部类的用法. 一.成员内部类:成员内部类是最普通的内部类,它的定义为位于另一个类的内部,成员内部类可以无条件访

黑马程序员——————&gt;非静态内部类

------- android培训.java培训.期待与您交流! ---------- 大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个人类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类,内部类主要有如下作用: 1:内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类. 2:内部类成员可以直接访问外部类的私有数据,因为内部类被当成其成员,同一个类的成员之间可以互相访问.但外部类不能访问内部类的实现细

java内部类之成员内部类

内部类概念:顾名思义,就是将一个类定义在另一个个类内部.内部的类称之为内部类 . 内部类的主要特点:1.内部类可以很好的实现隐藏,可以使用protected.private修饰符.2.内部类可以直接访问外部类的所有成员,包括私有成员.3.外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才可以访问.4.内部类可以解决一些问题,比如间接地实现继承.可以避免修改接口而实现同一个类 中两种同名方法的调用 内部类有四种: 成员内部类,静态内部类,匿名内部类,局部内部类 起名字时,$符号是合法字符

Java—封装

封装 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法类实现对隐藏信息的操作和访问. 封装的实现步骤:修改属性的可见性(设为private)=>创建setter和getter方法(用于属性的读写)=>在setter和getter方法中加入属性控制语句(对属性值的合法性进行判断) Java中的包 包的作用:管理Java文件:解决同名文件冲突 定义包:package 包名,注意:必须放在Java源程序的第一行:包名间可以使用"."号隔开,如:com.

Java中各种(类、方法、属性)访问修饰符与修饰符的说明

类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所有类访问(使用),其他项目若想使用本项目中的类,必须将本项目打包为jar包,然后加入到classpath中 public类必须定义在和类名相同的同名文件中 (default) 只能被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中 修饰符 名称