黑马程序员技术交流社区

标题: 集合与内部类 [打印本页]

作者: HM何伟    时间: 2013-4-7 19:05
标题: 集合与内部类
本帖最后由 HM何伟 于 2013-4-7 21:34 编辑

一个外部类中能创建内部类的匿名对象不??顺便帮忙看下下面的代码有什么问题 ??
  1. package Conllection;

  2. import java.util.*;

  3. public class IteratorTest1 {
  4.         public static void main(String[] args) {
  5.                 Collection c = new ArrayList();
  6.                 c.add(new Person1("张飞", 20));// Object ob=new
  7.                                                                                 // Person();add("参数"):参数为对象Object
  8.                 c.add(new Person1("关羽", 21));
  9.                 c.add(new Person1("刘备", 22));
  10.                 Iterator it = c.iterator();// 此处的iterator是ArrayList内部中的一个匿名内部类.而Iterator则是外部的接口.
  11.                 while (it.hasNext()) {
  12.                         Person1 p = (Person1) it.next();
  13.                         System.out.println(p.getName() + "........." + p.getAge());

  14.                 }

  15. }

  16.         class Person1 {
  17.                 private String name;
  18.                 private int age;

  19.                 Person1(String name, int age) {
  20.                         this.name = name;
  21.                         this.age = age;

  22.                 }

  23.                 public String getName() {
  24.                         return name;
  25.                 }

  26.                 public void setName(String name) {
  27.                         this.name = name;
  28.                 }

  29.                 public int getAge() {
  30.                         return age;
  31.                 }

  32.                 public void setAge(int age) {
  33.                         this.age = age;
  34.                 }
  35.         }
  36. }
复制代码

作者: jdzzlf    时间: 2013-4-7 19:16
1、你这个代码会报错,因为main()是静态方法,所以你的内也要变为静态的。内部类对象这样创建是可以滴。
2、解决方法:class Person1----->static class Person1
3、帮你运行了一下,结果为:
张飞.........20
关羽.........21
刘备.........22
作者: 张先龙    时间: 2013-4-7 19:28
被楼上的说完了 内部类有些规则还是记清楚   给你贴一下:
1、可以访问它所在的外部内中的成员,包括私有成员。
2、外部内访问内部类则需要先建立内部类的对象。
3、建立内部类对象时需要标识内部类属于哪个外部类。用下面的格式:
OuterClass.InnerClass  in =new new OuterClass.(). new InnerClass();此格式并不是很常用。
4、内部类可以被private和static修饰,
被static修饰的内部类只能访问外部类的静态成员,在外部类访问内部类的非静态成员可以这样写:
new  OuterClass.InnerClass().内部类非静态成员;
访问内部类的静态成员则这样写:
OuterClass.InnerClass.内部类静态成员;
5、局部内部类(例如定义在外部类函数中的内部类),不能用private和static修饰。
6、当内部类中定义了静态成员,则这个内部类必须是静态内部类,即非静态内部类中不可以有静态成员。
7、外部类中的静态方法只能访问静态的内部类。

作者: 陈丽莉    时间: 2013-4-7 20:44
若还有问题,继续追问; 没有的话,请将帖子分类改成【已解决】~
作者: HM何伟    时间: 2013-4-7 21:31
学了后面的,忘了前面的了,哎.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2