黑马程序员技术交流社区

标题: 继承 [打印本页]

作者: 徐卓    时间: 2013-7-13 12:22
标题: 继承
本帖最后由 徐卓 于 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. //为什么会这样,能不能稍微改动下,使程序能通过编译
复制代码

作者: ㄗs:/|丶hearts    时间: 2013-7-13 12:55
在person类中加入 name age的 set get方法吧
这里改为  System.out.println("我是"+getName()+",我的年龄是"+getAge()+".");     



作者: 一木榜公    时间: 2013-7-13 13:00
本帖最后由 一木榜公 于 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>
复制代码

作者: chslzj    时间: 2013-7-13 13:03
因为你把对象的成员变量定义成了
private int age;
private String name;
因为是private,所以这两个成员变量不能被子类的方法访问,你可以把修饰符改为protect ,这样这个成员变量就可以被子类访问,不可以被其他类访问,如果其他类要访问的话,把修饰符改为public
作者: 徐卓    时间: 2013-7-13 13:21
ㄗs:/|丶hearts 发表于 2013-7-13 12:55
在person类中加入 name age的 set get方法吧
这里改为  System.out.println("我是"+getName()+",我的年龄 ...

一下没想到,还是你理解我的意思
作者: 徐卓    时间: 2013-7-13 13:22
一木榜公 发表于 2013-7-13 13:00

这样也可以,不过age和name就成共有的了,2楼方法不错
作者: 徐卓    时间: 2013-7-13 13:22
chslzj 发表于 2013-7-13 13:03
因为你把对象的成员变量定义成了
private int age;
private String name;

可以这样




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