黑马程序员技术交流社区

标题: 关于内部类调用外部类属性及方法的一点问题 [打印本页]

作者: 王桂丽    时间: 2012-8-28 16:06
标题: 关于内部类调用外部类属性及方法的一点问题
/*
需求:定义一个内部类,一个外部类,用内部类调用外部类的方法,以及修改外部类的属性
*/

class  Person
{
private String name;
private int age;
private void play()
{
  System.out.println("wan");
}
    class Student
    {
  public static void setName(name)
  {
   this.name=name;
  }
  public static String getName()
  {
   return name;
  }
  public static void setAge(age)
  {
   this.age=age;
  }
  public static int getAge()
  {
   return age;
  }
  play();
    }
public static void main(String[] args)
{
  Student s=new Student();
  s.setName("zhangsan");
  s.getName();
  s.setAge(18);
  s.getAge();
  s.play;
  //System.out.println("Hello World!");
}
}

未命名.jpg (21.84 KB, 下载次数: 83)

未命名.jpg

作者: 朱烈葵    时间: 2012-8-28 16:15
我说姑娘,这题目好像见过了 哈哈
作者: 广驰    时间: 2012-8-28 16:29
本帖最后由 应广驰 于 2012-8-28 16:49 编辑

因为getName和 setName两个方法是静态的,不能对非静态字段 name 进行静态引用

而且方法getName和 setName不能声明为“静态”;只能在静态类型或顶级类型中才能声明静态方法

而且你定义方法时也没有声明参数的类型

你在内部类中定义的play()方法没有返回值类型,或者你不是定义方法而是直接使用外部类的引用方法,引用方法也错了

还有主函数中内部类对象建立方法也不对,没有外部类Person的实例

最后你的getName()和getAge()方法没有输出语句,直接调用放在那里根本毫无意义

我把你的代码改了一下,你看看吧
  1. class  Person
  2. {
  3.         private String name;
  4.         private int age;
  5.         private void play()
  6.         {
  7.                 System.out.println("wan");
  8.         }
  9.         class Student
  10.         {
  11.                 public void setName(String name)
  12.                 {
  13.                         Person.this.name=name;
  14.                 }
  15.                 public String getName()
  16.                 {
  17.                         return name;
  18.                 }
  19.                 public void setAge(int age)
  20.                 {
  21.                         Person.this.age=age;
  22.                 }
  23.                 public int getAge()                         
  24.                 {
  25.                         return age;
  26.                 }
  27.                 public void play()
  28.                 {
  29.                         Person.this.play();
  30.                 }
  31.         }
  32.                
  33.         public static void main(String[] args)
  34.         {
  35.                 Student s=new Person().new Student();
  36.                 s.setName("zhangsan");
  37.                 s.setAge(18);
  38.                 System.out.println("姓名"+s.getName()+"-----年龄"+s.getAge());
  39.                 s.play();
  40.         }
  41. }
复制代码





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