黑马程序员技术交流社区

标题: 关于内部类的一个问题,请大家讨论该如何解决! [打印本页]

作者: Tom    时间: 2012-12-29 19:59
标题: 关于内部类的一个问题,请大家讨论该如何解决!
本帖最后由 Tom 于 2012-12-29 21:41 编辑


在学习内部类过程中,我认为直接在外部类中创建内部类对象,并使用内部类的对象调用其方法,结果程序就报错:
错误提示为:Exception in thread "main" java.lang.Error: 无法解析的编译问题:
at example.InnerClassDemo.main(Outer.java:23)


我是将以下代码中的 void method( ) { } 去掉,只剩下其中的代码,还有main()函数中的out.method()这句话去掉。
  1. class Outer
  2. {
  3.         private int x = 3;

  4.         class Inner//内部类
  5.         {

  6.             void function()
  7.             {
  8.                   //int x = 6;
  9.                  System.out.println("innner :"+Outer.this.x);
  10.              }
  11.         }

  12.          void method()
  13.          {

  14.           Inner in = new Inner();
  15.           in.function();
  16.           }
  17. }

  18. class InnerClassDemo
  19. {
  20.        public static void main(String[] args)
  21.       {
  22.         Outer out = new Outer();
  23.         out.method();
  24.       }
  25. }
复制代码

作者: 刘丰伟    时间: 2012-12-29 20:17
前两天写的一个关于内部类和外部类互相访问的程序,供楼主参考:
  1. package com.itheima;

  2. public class Test8 {

  3.         /**
  4.          * 创建一个包含有private的属性和private方法的类。然后创建一个内部类,
  5.          * 它有一个方法可用来修改外部类的属性,并调用外部类的方法。在外部类的另一个方法中, 创建此内部类的对象,并且调用它的方法。
  6.          *
  7.          * @param args
  8.          */
  9.         public static void main(String[] args) {
  10.                 Out f = new Out();
  11.                 f.meth2(); // 外部类对象f 调用mingling() 方法。
  12.         }
  13. }

  14. class Out {
  15.         private String name = "外部类"; // private的属性

  16.         private void meth1() // private方法
  17.         {
  18.                 System.out.println(name + "方法1");
  19.         }

  20.         class In // 创建的内部类
  21.         {
  22.                 void neibu(String name) {
  23.                         Out.this.name = name;// 修改外围类的属性(使用外部类名.this)
  24.                         meth1(); // 调用外围类的方法
  25.                 }
  26.         }

  27.         public void meth2() // 外围类中另一个方法
  28.         {
  29.                 new In().neibu("外部类调用内部类");// 建立内部类的 匿名对象 调用内部类方法
  30.         }
  31. }
复制代码

作者: 孙浩    时间: 2012-12-29 20:22
public class Test {
        public static void main(String[] args) {
                // 外部类只能在构造器或者实例方法中创建内部类对象
                Inner inner = new Inner();    //报错   
        }
        
        private class Inner {
        }
}
作者: 王玮    时间: 2012-12-29 20:30
class Outer

{
        private int x = 3;

        class Inner// 内部类
        {
                void function()
                {
                        // int x = 6;
                        System.out.println("innner :" + Outer.this.x);
                }
        }

        Inner in = new Inner();
        in.function();
        }



在一个类中有两种事物:一种是属性,一种是方法。按你想的, in.function();  它在类中是啥,即不是属性,也不是方法 ,是类的方法的调用。故无法运行。。。。
作者: Tom    时间: 2012-12-29 21:42
刘丰伟 发表于 2012-12-29 20:17
前两天写的一个关于内部类和外部类互相访问的程序,供楼主参考:

谢谢你的回复!
作者: Tom    时间: 2012-12-29 21:44
孙浩 发表于 2012-12-29 20:22
public class Test {
        public static void main(String[] args) {
                // 外部类只能在 ...

谢谢你的回复!
正解!
作者: Tom    时间: 2012-12-29 21:47
王玮 发表于 2012-12-29 20:30
class Outer

{

谢谢你的回复!
正解!




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