黑马程序员技术交流社区

标题: 请教一个问题!! [打印本页]

作者: 胡宝林    时间: 2012-6-8 11:05
标题: 请教一个问题!!
public class C{
    public static void main(String[] args) throws Exception{
        new C().a();
    }
    private void a()throws Exception {
        System.out.println( Inner.class.newInstance() );
    }
    public class Inner{
        public String toString(){
            return "haha";
        }
    }
}
//Inner内部类重写了toString方法,打印这个内部类的实例,会打印haha,但是却报错,哪错了,求解!!!!

作者: 郑传庆    时间: 2012-6-8 11:15
你本身的代码就有问题,要不你就写成下面这样
public static void main(String[] args)throws Exception

        {
                new Inner().a();
        }

          public static class Inner{
                public String toString(){
                    return "haha";
                }

                    private   void a()throws Exception {
                    System.out.println( Inner.class.newInstance() );
                }
            }
作者: 孙峰    时间: 2012-6-8 11:19
private void a()throws Exception {
        System.out.println( Inner.class.newInstance() );
    }
这里有错误啊。 Inner.class 请问是什么意思呢? 还有:newInstance()方法在哪?
如果改成:Seytem.out.print(new Inner().toString());就可以了, 首先:Inner类是非静态的,调用的话,你要创建对象:new Inner(),然后这个对象再调用里面的 toString()方法。
作者: 杨文园    时间: 2012-6-8 11:28
你在静态方法中调用 非静态的类,肯定有问题  ;你把内部类换成 static 声明就ok了 我已经试过了望采纳!
作者: 何拴绪    时间: 2012-6-8 12:17
要想引用内部类的方法,首先要创建外部类对象。然后再通过外部类创建内部类对象。直接上代码:
  1. public class C{
  2.      public static void main(String[] args) throws Exception{
  3.           C c=new C();
  4.          C.Inner inner = c.new Inner();//创建内部类要先创建外部类对象然后创建内部类对象。
  5.       c.a(inner);//打印“haha”
  6.        System.out.print(inner);//打印“haha”
  7.           }
  8.      private void a(Inner in)throws Exception {
  9.                
  10.          System.out.println(in);
  11.      }
  12.      public  class Inner{
  13.          public String toString(){
  14.              return "haha";
  15.          }
  16.      }
  17. }
复制代码

作者: 赵兵锋    时间: 2012-6-8 12:35
  1. public class Main {
  2.         public static void main(String[] args) throws InstantiationException,
  3.                         IllegalAccessException {
  4.                 new Main().a();
  5.         }

  6.         private void a() throws InstantiationException, IllegalAccessException {
  7.                 System.out.println(Inner.class.newInstance());
  8.                 System.out.println(Inner.class.newInstance());
  9.         }

  10.         public static class Inner {
  11.                 static{
  12.                         System.out.println("static init");
  13.                 }
  14.                 public Inner() {
  15.                         System.out.println("construct init");
  16.                 }
  17.                 @Override
  18.                 public String toString() {
  19.                         return "haha";
  20.                 }
  21.         }
  22. }
复制代码
输出:
static init
construct init
haha
construct init
haha
作者: 黑马-王言龙    时间: 2012-6-8 12:59
杨文园 发表于 2012-6-8 11:28
你在静态方法中调用 非静态的类,肯定有问题  ;你把内部类换成 static 声明就ok了 我已经试过了望采纳! ...

已经创建匿名对象了!
作者: 唐志兵    时间: 2012-6-8 13:43
内部类可以直接访问外部类中的成员,包括私有

外部类想要访问内部类中的成员或方法首先要建立内部类的对象。


  1. public class C{
  2.      public static void main(String[] args) throws Exception{
  3.              C c = new C();   //首先要实例化一个外部类
  4.          
  5.              System.out.println(c.new inner().toString());  然后再去实例化一个内部类,这样才能调用里面的方法。
  6.      }
  7.      
  8.      class inner{
  9.             public String toString(){
  10.                 return "haha";
  11.              }
  12.      }
  13. }
复制代码





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