A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© HM何伟 中级黑马   /  2013-4-7 19:05  /  1622 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

倒序浏览
1、你这个代码会报错,因为main()是静态方法,所以你的内也要变为静态的。内部类对象这样创建是可以滴。
2、解决方法:class Person1----->static class Person1
3、帮你运行了一下,结果为:
张飞.........20
关羽.........21
刘备.........22

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
被楼上的说完了 内部类有些规则还是记清楚   给你贴一下:
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、外部类中的静态方法只能访问静态的内部类。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,继续追问; 没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
学了后面的,忘了前面的了,哎.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马