黑马程序员技术交流社区

标题: 关于继承的小程序 [打印本页]

作者: 凝聚    时间: 2013-11-16 09:56
标题: 关于继承的小程序
本帖最后由 凝聚 于 2013-11-16 10:08 编辑

这是题目:
声明类Person,包含2个成员变量:name、age。定义函数sayHello(),调用时输出:我叫***,今年***岁了。声明类Chinese继承Person。
我是这样做的
package test;

public class eight {
        public static void main(String[] args) {
                Chinese Ce=new Chinese();
                Ce.sayHello();
        }

}
class Person
{
String name;
int age;
void sayHello()
{
        System.out.println("我叫"+name+"今年"+age+"岁了");
}
}
class Chinese extends Person
{
        String name="小明";
        int age=23;
        void sayHello()
        {
                System.out.println("我叫"+name+"今年"+age+"岁了");
        }
}

我这样做是不是太简单了?我做的对吗?难道需要键盘录入姓名和年龄然后再传进去....................?应该怎么做
请大神评价

作者: 一步一脚印    时间: 2013-11-16 10:15
  1. public class eight {

  2.         public static void main(String[] args) {
  3.                 // TODO Auto-generated method stub
  4.                 Chinese c = new Chinese();
  5.                 c.sayHello();
  6.         }

  7. }

  8. class Person {
  9.         String name;
  10.         int age;

  11.         void sayHello() {
  12.                 System.out.println("我叫" + name + "今年" + age + "岁了");
  13.         }
  14. }

  15. class Chinese extends Person {
  16.        
  17.         void sayHello() {
  18.                 /*
  19.                  * 子类没有定义父类的属性或方法,并且这些属性和方法不是private的话,那么等同于和子类共享
  20.                  * 这些属性和方法,子类不用再自己定义。
  21.                  * 这就是继承的作用,减少代码的冗余度。
  22.                  */
  23.                 name = "小明";//其实这个就是调用父类的name属性,下面同理。
  24.                 age = 23;
  25.                 super.sayHello();//调用父类的sayHello()方法
  26.         }
  27. }
复制代码
你写的偏离了继承的特性,你在好好想想看。
下面给你举一个例子,你看看你是否想的明白。
  1. class Person {
  2.         String name;
  3.         int age;
  4.        
  5. }
  6. class Teacher extends Person{
  7.         //这个类什么都不做,继承Person,但是他共享Person类的属性
  8. }
  9. class Student extends Person{
  10.         //Student类也类似。
  11.        
  12. }
复制代码

作者: wu_lesley    时间: 2013-11-16 10:20
我认为这个程序运行是没有问题的,也基本完成了题目的要求,而且你在父类里定义了一个sayHello(),在子类里也定义了sayHello(),java编译器会认为子类的方法试图覆盖父类的方法,当然这样是没有问题的。不知道回答的对不对。共同学习吧
作者: 一步一脚印    时间: 2013-11-16 10:23
wu_lesley 发表于 2013-11-16 10:20
我认为这个程序运行是没有问题的,也基本完成了题目的要求,而且你在父类里定义了一个sayHello(),在子类里 ...

这道题虽然有多种解法,但是我们要找到题目的考点, 是为了考继承。
所以 你的解题思路必须围绕着继承的特性来。
那么你还认为他那题真的满足题目要求吗?
作者: 王雨神    时间: 2013-11-16 10:27
继承为什么要使用?你这个代码没必要试用继承,根本就提现不出来继承的作用嘛。
我给你写一个例子和思路吧,希望楼主能够领悟和明白。
现有一个动物类Animal,类中有一方法说话。
  1. class Animal {
  2.   public void say(){
  3.    System.out.println("动物说话"+"*^*%^&%");
  4.   }

  5. }
复制代码
这个时候可以写一个person类继承动物人,人是动物吧?但是人跟动物的叫声不一样吧?这个时候继承动物类,然后重写他的说话方法。
也就是说你对父类的方法实现不满意,达不到要求这个时候重写。
  1. class person extends Animal{
  2. public void say(){
  3. System.out.println("人说话"+"你好!");
  4. }

  5. }
复制代码
在写一个类狗,继承动物类。狗的说话方法跟父类又不不一样。
  1. class dog extends Animal{
  2. public void say(){
  3. System.out.println("狗说话"+"汪汪!");
  4. }

  5. }
复制代码
现有一个打印说话的方法,如果没有继承存在的话,你这个方法里得判断是哪个对象,确定是哪个对象后,在调用对象的方法的相应方法,比较麻烦。
这个时候就可以用继承了,继承的多态性,会根据实例化哪个对象,动态调用相应对象的方法。
例子:
  1. public  void  printSay(Animal a){
  2.    a.say();
  3. }
复制代码
Animal  a=new dog();


实际上实例化的就是dog的对象。父类对象指向子类引用。。所以这里自动调用的就是dog里的say方法。。希望你能明白

作者: 凝聚    时间: 2013-11-16 10:49
谢谢大家的捧场,我做出来了{:soso_e113:}
作者: To    时间: 2013-11-16 12:23
加上Scanner,主函数调用的时候动态传入并打印才最好




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