码迷,mamicode.com
首页 > 编程语言 > 详细

java中的内部类

时间:2015-06-12 15:07:21      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:java中的内部类

内部类的作用是:可以访问外部类中的私有数据

成员内部类:

  1. 成员内部类可以等同的看做是成员变量。

  2. 成员内部类不能有静态声明。

  3. 成员内部类可以访问外部类的所有的数据。

public class OuterClass{
	
	//静态变量
	private static String s1 = "A";
	
	//成员变量
	private String s2 = "B";
	
	//静态方法
	private static void m1(){
		System.out.println("static‘s m1 method execute!");
	}
	
	//成员方法
	private void m2(){
		System.out.println("m2 method execute!");
	}
	
	//成员内部类
	//可以用访问控制权限的修饰符修饰。
	//public,protected,private,缺省
	class InnerClass{
		
		//静态方法
		//public static void m3(){}
		
		//成员方法
		public void m4(){
			System.out.println(s1);
			m1();
			
			System.out.println(s2);
			m2();
		}
	}
	
	//入口
	public static void main(String[] args){
		
		//创建外部类对象
		OuterClass oc = new OuterClass();
		
		InnerClass inner = oc.new InnerClass();//注意成员内部类的访问方式
		
		inner.m4();
		
	}
}

静态内部类:可以看做是静态变量 ,可以访问外部类的静态数据,无法直接访问成员。

public class OuterClass{
	
	//静态变量
	private static String s1 = "A";
	
	//成员变量
	private String s2 = "B";
	
	//静态方法
	private static void m1(){
		System.out.println("static‘s m1 method execute!");
	}
	
	//成员方法
	private void m2(){
		System.out.println("m2 method execute!");
	}
	
	//静态内部类
	//可以用访问控制权限的修饰符修饰。
	//public,protected,private,缺省
	static class InnerClass{
		
		//静态方法
		public static void m3(){
			System.out.println(s1);
			m1();
			
			//System.out.println(s2);
			//m2();
		}
		
		//成员方法
		public void m4(){
			System.out.println(s1);
			m1();
			
			//System.out.println(s2);
			//m2();//不能访问外部类的成员方法和成员变量。
		}
	}
	
	
	//入口
	public static void main(String[] args){
		
		//执行m3
		OuterClass.InnerClass.m3();
		
		//执行m4
		InnerClass inner = new OuterClass.InnerClass();//创建静态内部类的对象
		inner.m4();
		
	}
	
}
局部内部类:
  局部内部类相当于局部变量,局部内部类在访问局部变量的时候必须用final修饰;
  (jdk1.8中的新特性好像是取消了)。
  
public class OuterClass{
	
	//方法
	public void m1(){
		
		//局部变量
		final int i = 10;//为什么用final修饰?
		
		//局部内部类
		//局部内部类不能用访问控制权限修饰符修饰。
		class InnerClass{
			
			//内部类不能有静态声明
			//public static void m1(){}
			
			//成员方法
			public void m2(){
				System.out.println(i); // 10
			}
				
		}
		
		//调用m2
		InnerClass inner = new InnerClass();
		inner.m2();//怎么样使用m2方法。
		
	}
	
	
	//入口
	public static void main(String[] args){
		OuterClass oc = new OuterClass();
		oc.m1();	
	}
	
	
匿名内部类:
/*
	匿名内部类:指的是类没有名字.
*/
public class Test{
	
	//静态方法
	public static void t(CustomerService cs){
		cs.logout();
	}
	
	//入口
	public static void main(String[] args){
		
		//调用t方法
		//t(new CustomerServiceImpl());
		
		//使用匿名内部类的方式执行t方法
		//整个这个"new CustomerService(){}"就是个匿名内部类
		t(new CustomerService(){
			public void logout(){
				System.out.println("exit!");
			}
		});
		
		//匿名内部类的优点:少定义一个类.
		//缺点:无法重复使用!
	}
	
}


//接口
interface CustomerService{
	
	//退出系统
	void logout();
	
}

//编写一个类实现CustomerService接口
/*
class CustomerServiceImpl implements CustomerService{

	public void logout(){
		System.out.println("系统已经安全退出!");
	}
}
*/	

本文出自 “gaogaozi” 博客,请务必保留此出处http://hangtiangazi.blog.51cto.com/8584103/1661202

java中的内部类

标签:java中的内部类

原文地址:http://hangtiangazi.blog.51cto.com/8584103/1661202

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!