黑马程序员技术交流社区

标题: 内部类的疑问?? [打印本页]

作者: Friends★    时间: 2012-4-23 11:11
标题: 内部类的疑问??
内部类的疑问(有的发懵了)

      当内部类定义在外部类的成员位置上时,是可以直接访问外部类中的成员变量,但是我这个怎么不行,

内部类访问外部类中的成员变量,我可不可以像这样理解:(下面这个代码) 就是内部类中的show()方法通过调用,输出Inner=2;
的值呢!还有一点就是内部类访问外部类的时候,在主函数中时创建内部类对象还是外部类对象?

public class Test2 {
  public static void main(String[] args) {
        Outer  ou= new Outer();//内部类访问外部类时创建哪个对象,外部的还是内部的
        ou.method();
}
}



class  Outer
{
        private int x=2;
     class  Inner{
             void  show(){
                     
                     System.out.println("Inner="+x);
             }
             
     }

     void  method(){
            // Inner  in=new Inner();
             
           //in.show();
        System.out.println("x="+x);
     }
}


作者: 王勃    时间: 2012-4-23 11:30
大哥,你得将main函数写在Outer类中,虽说你的Test类也许和Outer在同一个包,但你觉得这是内部类访问外部类非静态变量的练习吗?
作者: Friends★    时间: 2012-4-23 11:37
王明(1988) 发表于 2012-4-23 11:30
大哥,你得将main函数写在Outer类中,虽说你的Test类也许和Outer在同一个包,但你觉得这是内部类访问外部类 ...

大哥,你懂不懂啊,Outer类不是我后定义的嘛,主函数只是执行入口!
作者: 王勃    时间: 2012-4-23 11:48
本帖最后由 王明(1988) 于 2012-4-23 13:57 编辑

你的代码上的好看点啊,我写个你看是你说的意思不?
  1. package com.heima;

  2. public class Chicken {
  3.         private double weight;
  4.         
  5.         public Chicken() {}
  6.         public Chicken(double weight) {
  7.                 this.weight = weight;
  8.         }
  9.         
  10.         public void test() {
  11.                 ChickenLeg cl = new ChickenLeg(1.4, "火红色");
  12.                 cl.info();
  13.         }
  14.         
  15.         //定义内部类ChickenLeg,我用private修饰,当然你想让其他包知道不用也ok
  16.         private class ChickenLeg {
  17.                 private double lenght;
  18.                 private String color;
  19.                
  20.                 public ChickenLeg() {}
  21.                 public ChickenLeg(double lenght, String color) {
  22.                         this.lenght = lenght;
  23.                         this.color = color;
  24.                 }
  25.                 public double getLenght() {
  26.                         return lenght;
  27.                 }
  28.                 public void setLenght(double lenght) {
  29.                         this.lenght = lenght;
  30.                 }
  31.                 public String getColor() {
  32.                         return color;
  33.                 }
  34.                 public void setColor(String color) {
  35.                         this.color = color;
  36.                 }
  37.                
  38.                 //非静态内部类的实例方法
  39.                 public void info() {
  40.                         System.out.println("当前鸡腿的颜色是:"+color+",高是:"+lenght);
  41.                         //访问外部类的私有属性weight
  42.                         System.out.println("本鸡腿所属鸡的重量是:"+weight);
  43.                 }
  44.         }
  45.         
  46.         public static void main(String[] args) {
  47.                 Chicken c = new Chicken(14.2);
  48.                 c.test();
  49.         }

  50. }
复制代码

作者: 王勃    时间: 2012-4-23 11:50
习惯性的加set get 多了点,我没什么别的意思,解决你的问题,就好。{:soso_e100:}{:soso_e100:}
作者: 王勃    时间: 2012-4-23 11:58
你的没错,我运行了,为省事我将main写在outer中了。
上图:
  1. package com.heima;

  2. public class Outer {

  3.         public static void main(String[] args) {

  4.                 Outer ou = new Outer();// 内部类访问外部类时创建哪个对象,外部的还是内部的

  5.                 ou.method();

  6.         }

  7.         private int x = 2;

  8.         class Inner {

  9.                 void show() {

  10.                         System.out.println("Inner=" + x);

  11.                 }

  12.         }

  13.         void method() {
  14.                 //是想用下面的两句吧。。。不过你在method成员方法中new对象不好,最好在main中new吧

  15.                 Inner in = new Inner();

  16.                 in.show();

  17.                 // System.out.println("x="+x);
  18.         }
  19. }
复制代码
结果:

作者: 王勃    时间: 2012-4-23 11:58
结果为:

作者: 王勃    时间: 2012-4-23 12:03
大哥,你懂不懂啊,Outer类不是我后定义的嘛,主函数只是执行入口!

亲,不要讽刺哥,看不懂程序入口,之前做过javaEE,android程序员,只不过对公司不满意,想通过黑马找个好公司而已。
作者: Friends★    时间: 2012-4-23 12:13
王明(1988) 发表于 2012-4-23 12:03
亲,不要讽刺哥,看不懂程序入口,之前做过javaEE,android程序员,只不过对公司不满意,想通过黑马找个好 ...

那你岂不是黑马牛人!不过学习了,感谢回答!
作者: 王勃    时间: 2012-4-23 13:56
、、、、




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