`
Luob.
  • 浏览: 1573561 次
  • 来自: 上海
社区版块
存档分类
最新评论

java之9天 内部类

    博客分类:
  • Java
阅读更多
内部类,静态内部类,全局内部类

/**
 * 内部类的访问规则:
 * 1.内部类可以直接访问外部类中的成员,包括私有 
 *   之所以可以直接访问外部类中的成员,是因为内部类中持有一个外部类的引用, 格式为  外部类名.this.成员
 * 2.外部类要访问内部类,必须建立对象
 * 
 *访问格式:
 *当内部类定义在外部类的成员位置上,而且非私有, 可以在外部其他类中可以直接建立内部类对象.
 *格式:
 *    外部类名.内部类名  变量名=外部类对象.内部类对象;
 *    Outer.Inner in=new Outer().new Inner();
 *2,当外部类在成员位置上,就可以被成员修饰符所修饰
 *    比如: private : 将外部类中的内部类进行封装
 *         static :  内部类就具备static 特性 ,只能访问 外部类的static成员.出现访问局限
 *         (静态内部类: 一般是 应用的数据全是 静态的数据的时候就可以定了)
 *
 *3.其他外部类中怎么访问 静态内部类的非静态成员
 *    new Outer.Inner2().function();
 *    
 *4.其他外部类中怎么访问静态内部类中的静态成员.
 *   Outer.Inner2.function1();
 *
 * 注意 : 当内部类中定义了静态成员,该内部类必须是static的
 *      当外部类中的静态方法访问内部类时候,该内部类也必须是static的
 *      
 */
class Outer{
	private int x=3;
	
	private static int y=5;
	//外部类中 访问内部类中的成员
	void method(){
		Inner in=new Inner();
		in.funtion();
	}
	
	//放在一个内的内部
	class Inner{  
		int x=4;
		//可以直接访问外部类中的成员
		void funtion(){
			int x=6;
			System.out.println("内部类:"+x);     // 6
			System.out.println("内部类:"+this.x);      // 4
			System.out.println("内部类:"+Outer.this.x);  // 3
		}
		
		/* 非静态内部类中不能有 静态成员
		static int y=8;
		static void function1(){
			System.out.println("内部类:"+x);   
		}*/
	}
	
	private class Inner1{
		int x=4;
		void function(){
			int x=6;
			System.out.println("内部类:"+x);     // 6
			System.out.println("内部类:"+this.x);      // 4
			System.out.println("内部类:"+Outer.this.x);  // 3
		}
		
	}
	static class Inner2{
		
		//静态内部类的 非静态成员
		void function(){
			System.out.println("静态内部类:"+y);
		}
		//静态内部类的静态成员
		static void function1(){
			System.out.println("静态内部类:"+y);
		}
		
	}
	
	//外部类中的静态成员 
	public static void method1(){
		//访问  该外部类中的静态内部类静态方法
		Inner2.function1();
		
		//new Inner1().function();   //报错 因为 Inner1 不是静态内部类
	}

}

public class InnerClassDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Outer out=new  Outer();
		out.method();
		
		//如果直接访问内部类中的额function
		Outer.Inner in=new Outer().new Inner();// 外部类对象 .new 内部类对象
		in.funtion();
		
		//静态内部类中的非静态成员
		Outer.Inner2 in2=new Outer.Inner2();
		in2.function();
		new Outer.Inner2().function();
		
		//静态内部类 中的静态成员
		Outer.Inner2.function1();
	}
}

/**
 * 当描述事物时, 事物的内部还有事物,该事物用内部类来描述
 * 因为内部事务在使用外部事务的内容. 
 *   比如   身体  和 心脏 的关系   
 */
class Body{
	private class XinZang{  //之所以私有 , 是不让任何人访问   
		int jump=270;  //跳动的次数
		int speed=80;  //血流速度 
		void show(){
			System.out.println("心跳:"+jump+";血流速度:"+speed+"脉");
		}
	}
	
	public void seeXinZang(){  // 一个心脏病人 要看医生  
		//里面可以加入判断      是不医生? 身体是不是有病?   有:就给他们看 没有:就不给  等等
		new XinZang().show();
	}
	//比如还可以  是否 被女朋友踹了? 是: 就伤心  不是: 就开心   哈哈
}


局部内部类
/**
 * 内部类定义在局部时候
 * 1.不可以被成员修饰符修饰 (private static 等)
 * 2.可以直接访问外部类中的成员,因为还持有外部类中的引用
 *    但是不可以访问它所在的局部中的变量, 只能访问被final修饰的局部变量.
 */
class Outer{
	int x=3;
	void method(final int k){
		int  x=4;
		final int y=5;
		class Inner{  //局部的内部类  
			void function(){
				System.out.print(Outer.this.x);
				System.out.print(y);
				System.out.print(k);
			}
		}
		new  Inner().function();
	}
}


public class InnerClassDemo {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Outer out=new Outer();
		out.method(7);
		out.method(8);
	}

}


匿名内部类
/**
 * 匿名内部类
 * 1.其实就是一个内部类的简写格式
 * 2.定义匿名内部类的前提
 *    内部类必须是继承一个类或者实现接口
 * 3.匿名内部类的格式
 *    new 父类或者接口(){定义子类的内容}.成员
 *    
 * 4.其实匿名内部类就是一个匿名子类对象.而且这个对象有点胖.
 * 5.匿名内部类中定义方法 最好不要超过3个.
 *
 */
abstract class AbsDemo{
	abstract void show();
}

class Outer{
	int x=3;
	
	class Inner extends AbsDemo{
		void show(){
			System.out.println("show"+Outer.this.x);
		}
	}
	
	public void function(){  //不采用匿名内部类
		new Inner().show();
	}
	
	//采用 匿名内部类实现
	public void function1(){
		
		//这就是匿名内部类
		new AbsDemo() {  //如果只用一次
			@Override
			void show() { //需要先实现 抽象类中的方法 
				System.out.println("show"+Outer.this.x);
			}
		}.show();
		
		new AbsDemo() {  //如果只用一次
			@Override
			void show() { //需要先实现 抽象类中的方法 
				System.out.println("show"+Outer.this.x);
			}
			void method(){ //子类特有的
				System.out.println("method:"+Outer.this.x);
			}
		}.method();
		//发现 要进行多方法调用的时候 每次都要创建一个对象
		
	}
}

public class AnonymousInner {
	public static void main(String[] args) {
		new  Outer().function(); 
	}
}

/***
 * 题目 补足代码 采用匿名内部类完成
 */

interface Inter{
	void method();
}

class Test{
	//补足代码 采用匿名内部类完成
	static Inter function(){
		return new Inter(){
			public void method(){
				System.out.println("method show run");
			}
		};
	}
}

class AnonymousInnerTest{
	
	public static void main(String[] args){
		//根据这句话  在上面补足代码
		Test.function().method();
		//Test.function(): Test类中有一个静态方法 function
		//.method():function运算后返回的结果对象是 一个Inter对象,因为只有 Inter采用metho方法
	}
}
/**
 * 面试题:如果没有接口 没有 父类   请写一个 匿名抽象类调用一个方法
 */
class InnerTest{
	public static void main(String [] args){
		new Object(){
			public void function(){
				System.out.println("function run");
			}
		}.function();
	}
}


1
1
分享到:
评论

相关推荐

    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-十种内部排序实现(选择,冒泡,插入,希尔,堆,归并,快速,基数,计数,桶)

    1. 选择排序 2. 冒泡排序 3. 插入排序 4. 希尔排序 5. 堆排序 6. 归并排序 7.... 8.... 9. 计数排序 10. 桶排序 十种排序代码 我的博文地址:http://blog.csdn.net/u010156024/article/details/48932219

    JAVA面试题最全集

    一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? ...

    张孝祥Java就业培训教程.pdf

    3.8 内部类 3.9 使用Java的文档注释 第4章 面向对象(下) 4.1 类的继承 4.2 抽象类与接口 4.3 对象的多态性 4.4 异常 4.5 包 4.6 访问控制 4.7 使用jar文件 第5章 多线程 5.1 如何创建与理解线程 5.2 多线程的同步 ...

    java范例开发大全

    第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java...

    java范例开发大全源代码

     第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7  实例1 ...

    Java范例开发大全 (源程序)

     第1章 Java开发环境的搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7  实例1 开发第一个...

    Java面试宝典-经典

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    Java面试宝典2010版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    Java范例开发大全(全书源程序)

    第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2...

    java范例开发大全(pdf&源码)

    第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java...

    java面试题大全(2012版)

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    javaOA系统源码 java项目

    11、工作日程:用户可按需写自己的工作日程安排,选择日期后填写,到了日程安排那天,登陆oa无纸化办公系统即可收到文字及动画与语音提示。同时,写完的日程可修改,删除操作等。 12、工作计划:用户可在系统内写...

    30天搞定Java–day9

    代码块、内部类 面向对象的三大特征:封装、继承、多态 其它关键字:this、super、abstract、interface、static、final、package、import 谈谈你对面向对象中类和对象的理解,并指出二者的关系? 类:抽象的、概念上...

    最新Java面试宝典pdf版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    java面试宝典2012

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    Java面试笔试资料大全

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

Global site tag (gtag.js) - Google Analytics