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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

6 个回复

倒序浏览
前两天写的一个关于内部类和外部类互相访问的程序,供楼主参考:
  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. }
复制代码
回复 使用道具 举报
public class Test {
        public static void main(String[] args) {
                // 外部类只能在构造器或者实例方法中创建内部类对象
                Inner inner = new Inner();    //报错   
        }
        
        private class Inner {
        }
}

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
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();  它在类中是啥,即不是属性,也不是方法 ,是类的方法的调用。故无法运行。。。。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
Tom 初级黑马 2012-12-29 21:42:55
报纸
刘丰伟 发表于 2012-12-29 20:17
前两天写的一个关于内部类和外部类互相访问的程序,供楼主参考:

谢谢你的回复!
回复 使用道具 举报
Tom 初级黑马 2012-12-29 21:44:38
地板
孙浩 发表于 2012-12-29 20:22
public class Test {
        public static void main(String[] args) {
                // 外部类只能在 ...

谢谢你的回复!
正解!
回复 使用道具 举报
Tom 初级黑马 2012-12-29 21:47:59
7#
王玮 发表于 2012-12-29 20:30
class Outer

{

谢谢你的回复!
正解!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马