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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张甲甲 中级黑马   /  2013-5-23 00:28  /  1529 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张甲甲 于 2013-5-24 13:29 编辑

我在Test8类中写了一个内部类InnerClass可是
然后在main方法中想申请一个InnerClass的对象
但是编译 的时候就出错了
希望你们帮我看看到底是为什么
万分感谢。

public class Test8 {
  //定义的内部类
        class InnerClass {
      //内部类的方法
                public void innerClassMethod() {
                        name = "zhangjiajia";//外部类的private属性
                        System.out.println("name=" + name);
                        outerClassMethod();//为外部类的private方法。

                }

        }

        public static void main(String[] args) {
                InnerClass ic=new InnerClass();

        }
//外部类Test8的private属性
        private String name;

        
        

        //外部类Test8的private方法。
        private void outerClassMethod() {
                System.out.println("outerClassMethod");
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }

}



评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
你在创建对象的时候出错了,你创建内部类的对象时需要外部类所指的,Test8.InnerClass ic = new Test8().new InnerClass();
其次,你的ic没有调用InnerClass()的方法innerClassMethod();修改代码如下:
public class Test8 {
        // 定义的内部类
        class InnerClass {
                // 内部类的方法
                public void innerClassMethod() {
                        name = "zhangjiajia";// 外部类的private属性
                        System.out.println("name=" + name);
                        outerClassMethod();// 为外部类的private方法。
                }
        }
        public static void main(String[] args) {
                Test8.InnerClass ic = new Test8().new InnerClass();
                ic.innerClassMethod();
        }
        // 外部类Test8的private属性
        private String name;

        // 外部类Test8的private方法。
        private void outerClassMethod() {
                System.out.println("outerClassMethod");
        }

        public String getName() {
                return name;
        }

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

}

点评

非常好继续努力  发表于 2013-5-23 23:51

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
package com.itheima;


        public class Test8{
               
                static class InnerClass {
               
         public void innerClassMethod() {
                 name = "zhangjiajia";//外部类的private属性
                 System.out.println("name=" + name);
                outerClassMethod();}

                }

                public static void main(String[] args) {
                 InnerClass ic=new InnerClass();
                 }
                //外部类Test8的private属性
                private static String  name;

               
       


                 private static void outerClassMethod() {
                 System.out.println("");
                }
                public String getName() {
                return name;}
                 public void setName(String name) {
                this.name = name;
                }

}
你这里主要是main()方法是静态函数,而内部类是非静态的,静态函数是不能访问非静态成员的,在这里就是不恩能够访问InnerClass();我对你的代码做了一个修改,编译能够通过但是我这样更改完全失去了类的价值,只做参考用,只是为了说明问题,希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
非常好继续努力
回复 使用道具 举报
tshch1989 发表于 2013-5-23 11:17
package com.itheima;

答非常好继续努力
回复 使用道具 举报
To 金牌黑马 2013-5-23 23:53:29
地板
顶。                              
回复 使用道具 举报
xiewen 中级黑马 2013-5-24 00:19:55
7#
内部类访问规则:
1.内部类可以直接访问外部类中的成员,包括私有,之所以可以访问直接访问外部类的成员,是因为内部类中持有了一个外部类的引用,格式:外部类名.this
2.外部类要访问内部类,必须建立内部类对象。
注意:
     当内部类中定义了静态成员,该内部类就必须是static的。
    当外部类中的静态方法访问内部类时,内部类也必须是static的
                         黑马云青年为您解答
回复 使用道具 举报
年轻的棒棒 发表于 2013-5-23 07:35
你在创建对象的时候出错了,你创建内部类的对象时需要外部类所指的,Test8.InnerClass ic = new Test8().ne ...

懂了 谢谢你了啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马