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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐卓 中级黑马   /  2013-7-13 12:22  /  1338 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 徐卓 于 2013-7-13 13:22 编辑
  1. abstract class Person//父类定义age和name和抽象方法
  2. {
  3.         private int age;
  4.         private String name;
  5.         Person (int age,String name)
  6.         {
  7.                 this.age = age;
  8.                 this.name = name;
  9.         }
  10.         public abstract void SayHello ();
  11. }
  12. class Chinese extends Person   子类继承父类,构造函数向上走,定义age于name                 实现父类抽象方法
  13. {
  14.         Chinese (int age,String name)
  15.         {
  16.                 super(age,name);
  17.         }
  18.         public void SayHello ()
  19.         {
  20.                 System.out.println("我是"+name+",我的年龄是"+age+".");           //编译出现错误
  21.         }
  22. }


  23. class Test5
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 Chinese One = new Chinese (18,"王麻子");    //初始化One的age为18,name为“王麻子”
  28.          One.SayHello();
  29.         }
  30. }
  31. //为什么会这样,能不能稍微改动下,使程序能通过编译
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 淡定

查看全部评分

6 个回复

倒序浏览
在person类中加入 name age的 set get方法吧
这里改为  System.out.println("我是"+getName()+",我的年龄是"+getAge()+".");     


回复 使用道具 举报
本帖最后由 一木榜公 于 2013-7-13 13:05 编辑

  1. <P>abstract class Person//父类定义age和name和抽象方法
  2. {
  3.         int age;
  4.         String name;
  5.         Person (int age,String name)
  6.         {
  7.                 this.age = age;
  8.                 this.name = name;
  9.         }
  10.         public abstract void SayHello ();
  11. }
  12. class Chinese extends Person   //子类继承父类,构造函数向上走,定义age于name实现父类抽象方法
  13. {
  14.         Chinese (int age,String name)
  15.         {
  16.                 super(age,name);
  17.         }
  18.         public void SayHello ()
  19.         {
  20.                 System.out.println("我是"+name+",我的年龄是"+age+".");   //编译出现错误
  21.         }
  22. }


  23. class Test1
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                  Chinese One = new Chinese (18,"王麻子");    //初始化One的age为18,name为“王麻子”
  28.                                  One.SayHello();
  29.         }
  30. }
  31. //为什么会这样,能不能稍微改动下,使程序能通过编译

  32. // name ,age 在父类中private私有,只能在本类中访问有效,把private去掉编译就能通过</P>
  33. <P>//<FONT size=4>如果子父类中出现非私有的同名成员变量时,子类要访问本类中的变量,用this;子类要访问父类中的同名变量,用super。</FONT></P>
  34. <P> </P>
复制代码
回复 使用道具 举报
因为你把对象的成员变量定义成了
private int age;
private String name;
因为是private,所以这两个成员变量不能被子类的方法访问,你可以把修饰符改为protect ,这样这个成员变量就可以被子类访问,不可以被其他类访问,如果其他类要访问的话,把修饰符改为public
回复 使用道具 举报
ㄗs:/|丶hearts 发表于 2013-7-13 12:55
在person类中加入 name age的 set get方法吧
这里改为  System.out.println("我是"+getName()+",我的年龄 ...

一下没想到,还是你理解我的意思
回复 使用道具 举报

这样也可以,不过age和name就成共有的了,2楼方法不错
回复 使用道具 举报
徐卓 中级黑马 2013-7-13 13:22:40
7#
chslzj 发表于 2013-7-13 13:03
因为你把对象的成员变量定义成了
private int age;
private String name;

可以这样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马