为什么用 in.print(); 不能访问内部类变量

来源:7-6 Java 中的成员内部类

幕布斯2575146

2018-05-10 16:49


public class Classdemo {
 public static void main(String[] args) {
 outer out=new outer();
 out.show();
 outer.inner in=out.new inner();
 in.print();
 }

}
class outer{
 int num=3;
 String name="zhangsan";
 void show() {
  System.out.println("num="+num+"  "+"name"+name);
  }
  class inner{
   int num=8;
   String name="lisi";
   void print() {
    show();
    
  }
  }
}


写回答 关注

2回答

  • 流动的风与雪
    2018-05-10 17:10:25
    已采纳

    不太懂你意思,我运行程序,没什么错误,具体代码我完全没看,你要是真心想解决问题就描述清楚,你要实现什么功能,这样才能帮你啊,大兄弟!

    幕布斯257...

    非常感谢!

    2018-05-10 17:36:45

    共 2 条回复 >

  • 流动的风与雪
    2018-05-10 19:23:22

    你应该想的是inner为outer的内部类,所以inner可以直接使用outer的方法来输出自己的值吧。

    https://img1.mukewang.com/5af426fc00014c4e03960640.jpg

    这是我找的那一节,注意第二条,内部类可以访问外部类的方法,而并没有说内类可以直接使用外类的方法来输出自己的值吧。你可能没意识到,这是继承的概念。

    有两种解决方法

    1、如果你不想继承,直接把inner的print方法的方法体改为”System.out.println("num="+num+"  "+"name"+name);“,应该可以按你的要求运行。

    2、我不知道你学过继承没,你想用继承的话,我把代码改成如下,你可以运行一遍。

    public class Classdemo{
      public static void main(String[] args) {
      outer out=new outer();
      out.show();
      outer.inner in=out.new inner();
       in.num=8;
       in.name="lisi";
      in.show();
      }
     }
    class outer{
     int num=3;
     String name="zhangsan";
     void show() {
     System.out.println("num="+num+"  "+"name"+name);
     }
     class inner extends outer{}
     }


    有什么问题欢迎回复

    流动的风与雪 回复幕布斯257...

    嗯嗯,没关系,有问题继续问我,我也在自学Java

    2018-05-11 14:43:54

    共 2 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530715 学习 · 6091 问题

查看课程

相似问题