黑马程序员技术交流社区

标题: java 内部类问题 求指导 [打印本页]

作者: 张甲甲    时间: 2013-5-23 00:28
标题: java 内部类问题 求指导
本帖最后由 张甲甲 于 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;
        }

}




作者: 年轻的棒棒    时间: 2013-5-23 07:35
你在创建对象的时候出错了,你创建内部类的对象时需要外部类所指的,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;
        }

}

作者: tshch1989    时间: 2013-5-23 11:17
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();我对你的代码做了一个修改,编译能够通过但是我这样更改完全失去了类的价值,只做参考用,只是为了说明问题,希望对你有帮助
作者: 袁梦希    时间: 2013-5-23 23:51
非常好继续努力
作者: 袁梦希    时间: 2013-5-23 23:51
tshch1989 发表于 2013-5-23 11:17
package com.itheima;

答非常好继续努力
作者: To    时间: 2013-5-23 23:53
顶。                              
作者: xiewen    时间: 2013-5-24 00:19
内部类访问规则:
1.内部类可以直接访问外部类中的成员,包括私有,之所以可以访问直接访问外部类的成员,是因为内部类中持有了一个外部类的引用,格式:外部类名.this
2.外部类要访问内部类,必须建立内部类对象。
注意:
     当内部类中定义了静态成员,该内部类就必须是static的。
    当外部类中的静态方法访问内部类时,内部类也必须是static的
                         黑马云青年为您解答

作者: 张甲甲    时间: 2013-5-26 17:36
年轻的棒棒 发表于 2013-5-23 07:35
你在创建对象的时候出错了,你创建内部类的对象时需要外部类所指的,Test8.InnerClass ic = new Test8().ne ...

懂了 谢谢你了啊




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