Java类的第五个成员:内部类
2015-08-16 21:40
375 查看
内部类
1.相当于说,我们可以在类的内部再定义类。外面的类:外部类;里面的类:内部类。
2.内部类的分类:成员内部类(声明在类的内部且方法之外) VS 局部内部类(声明在类的方法里)
3.成员内部类:
3.1.是外部类的一个成员:①可以有4种修饰符;②可以和类中的属性一样用static和final修饰。
3.2.具体类的特点:①可以和类一样用abstract修饰;②还可以在其内部定义属性、方法、构造器。
4.局部内部类
5.关于内部类需要掌握的三个点:
5.1.如何创建成员内部类的对象(静态成员内部类的对象 VS 非静态成员内部类的对象)
5.2.如何区分调用外部类、内部类的对象(尤其是变量重名时)
5.3.局部内部类的使用
成员内部类实例代码:
局部内部类实例代码:
1.相当于说,我们可以在类的内部再定义类。外面的类:外部类;里面的类:内部类。
2.内部类的分类:成员内部类(声明在类的内部且方法之外) VS 局部内部类(声明在类的方法里)
3.成员内部类:
3.1.是外部类的一个成员:①可以有4种修饰符;②可以和类中的属性一样用static和final修饰。
3.2.具体类的特点:①可以和类一样用abstract修饰;②还可以在其内部定义属性、方法、构造器。
4.局部内部类
5.关于内部类需要掌握的三个点:
5.1.如何创建成员内部类的对象(静态成员内部类的对象 VS 非静态成员内部类的对象)
5.2.如何区分调用外部类、内部类的对象(尤其是变量重名时)
5.3.局部内部类的使用
成员内部类实例代码:
/** * 成员内部类 */ public class TestInnerClass { public static void main(String[] args) { //创建静态内部类的对象:可以直接通过外部类调用静态内部类的构造器 Man.Foot f = new Man.Foot(); //由于Foot类中的name属性为static修饰,所以可以直接调用 System.out.println(Man.Foot.name); System.out.println(f.id); //创建非静态内部类的对象:必须先创建外部类的对象, //通过外部类的对象调用内部类的构造器 //方法一: Man man = new Man(); Man.Head h1 = man.new Head(); //方法二: Man.Head h2 = new Man("BIG" , 20).new Head("LITTLE" , 5); h2.info("MID"); } } class Man { String name; int age; //非静态成员内部类 class Head { String name; int id; public Head() { super(); } public Head(String name, int id) { super(); this.name = name; this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public void info(String name) { System.out.println("name="+ name ); System.out.println("this.name=" + this.name); System.out.println("Man.this.name=" + Man.this.name); } } //静态成员内部类 //Foot是类名,不是对象名,所以Man.Foot是一个未实例化的静态类 static/*这个static是表明这个类相对外部类Man是静态的,可以用Man.Foot*/class Foot { static/*这个static是表明这个属性相对类Foot是静态的,可以用Foot.name*/ String name; int id; public Foot() { super(); } public Foot(int id) { super(); this.id = id; } } public Man() { super(); } public Man(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
局部内部类实例代码:
/** * 局部内部类 */ public class TestMethodInnerClass { public static void main(String[] args) { } } class OutClass { //局部内部类 //如下的使用方式较少 public void method1() { class InnerClass { } } //常常使用一个方法,使其返回值为某个类或接口的对象, //而这个类或接口在方法内创建 //方法一: public Comparable getComparable() { //1.创建一个实现Comparable接口的类:局部内部类 class MyComparable implements Comparable { @Override public int compareTo(java.lang.Object o) { return 0; } } //返回一个实现类对象 return new MyComparable(); } //方法二: //返回一个实现Comparable接口的匿名内部类的对象 public Comparable getComparable1() { return new Comparable() {//实现Comparable接口的匿名类 @Override public int compareTo(java.lang.Object o) { return 0; } }; } }
相关文章推荐
- 【leetcord】Invert Binary Tree 【java】
- 1.封装集合
- LRU缓存介绍与实现 (Java)
- 去哪网实习总结:java读写excel表格(JavaWeb)
- java NIO 实现
- java socket 通信示例
- Java深入 - Java 内存分配和回收机制-转
- Java关键字final、static使用总结
- eclipse从数据库逆向生成Hibernate实体类
- 正确编译和运行带package的文件(使用javac和java命令行)
- 使用Java快速实现进度条(转)
- Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)
- Java实现动态编译的两种方式
- Spring学习笔记-springMVC基于注解的控制器(基本概念)
- java对象引用和值引用,特殊的String!
- java遍历map的集中用法(执行效率)
- Spring---AOP简介
- java基础--高薪技术--JDK1.5新特性
- java中super关键字小结
- Java 对象