Java 内部类种类及使用解析
来源:互联网 发布:poop软件商店下载 编辑:程序博客网 时间:2024/05/18 17:05
看代码及其中的注释,可以拷贝到eclipse中执行一下测试:
import java.util.Date;
/**
* 演示各种内部类
* 静态内部类static inner class (also called nested class)
* 成员内部类member inner class
* 局部内部类local inner class
* 匿名内部类anonymous inner class
* @author Administrator
*
*/
public class OuterClass3 {
private static int a = 4;
private int b = 5;
//在外部类里面创建成员内部类的实例
public InnerClass2 in2 = this.new InnerClass2();
protected static void testOut(){
System.out.println("out static method");
}
protected void testOut2(){
System.out.println("out method");
}
/**
* 静态内部类
* 只可以访问外部类的静态方法和变量,不可以访问外部的非静态类和方法
* 无论是public,private protected都可以访问的到
*/
public static class InnerClass{
public void test1(){
System.out.println(a);
test2();
}
private void test2() {
testOut();
//static方法的访问属性无论是public,private protected都可以访问的到
//只可以在此访问静态方法或者变量
}
}
/**
*
*内部类可以访问外部类的所有静态和非静态的方法和类,
*无论是public,private protected都可以访问的到
*
*/
public class InnerClass2{
public int a = 1;
public int b = 2;
public void test1(){
System.out.println(a);// 直接访问a,则访问的是内部类里的a
System.out.println(b);
// 如何访问到外部类里的a呢?
System.out.println(OuterClass3.this.a);
System.out.println(OuterClass3.this.b);
testOut();
testOut2();
}
}
public void doInnerClass(){
int c = 100;
final int d = 200;
/**
* 方法内部类不能被以下的修饰符所修饰
* 像局部变量一样,不能被public, protected, private和static修饰
* 只能访问方法中定义的final类型的局部变量。
* 可以访问外部类的变量和方法,无论是public,private protected都可以访问的到
*/
class Inner3{
public void test3(){
// System.out.println(c);
//无法访问c,只能访问d这个final对象
System.out.println(d);
System.out.println(a);
System.out.println(b);
testOut();
testOut2();
}
}
new Inner3().test3();
}
public String getDate(Date date){
return date.toLocaleString();
}
public static void main(String[] args) {
//静态内部类的调用是使用new 主类.内部类方式调用,可以调用外部类的静态变量和方法
OuterClass3.InnerClass in = new OuterClass3.InnerClass();
in.test1();
System.out.println("*******************分割线***************");
//在外部类外部调用内部类
InnerClass2 in2 = (new OuterClass3()).new InnerClass2();
in2.test1();
System.out.println("*******************分割线***************");
OuterClass3 out = new OuterClass3();
out.doInnerClass();
System.out.println("*******************分割线***************");
System.out.println(out.getDate(new Date()));
System.out.println(out.getDate(new Date(){
@Override
public String toLocaleString() {
// TODO Auto-generated method stub
return "Hello "+super.toLocaleString();
}
}));
}
}
根据http://www.cnblogs.com/mengdd/archive/2013/02/08/2909307.html的文章内容做得实验
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- Java 内部类种类及使用解析
- java重启路由器并获取IP
- 为什么Android没有iOS那么顺滑
- HttpURLConnection 和HttpClient+Jsoup处理标签抓取页面和模拟登录
- BZOJ 1367([Baltic2004]sequence-左偏树+中位数贪心)
- perl中字符串比较
- Java 内部类种类及使用解析
- ubuntu配置open-mpi笔记(虚拟机)
- android控件之ProgressBar进度条
- .net 程序Config文件解读
- android开发资源
- android的帮助文档的使用
- VS2010禁止生成sdf文件
- USACO 2.2.1 Preface Numbering
- HDU 1575