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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凝聚 中级黑马   /  2013-11-16 09:56  /  1937 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 凝聚 于 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+"岁了");
        }
}

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

点评

FFF
+10086  发表于 2013-11-16 18:28

9 个回复

倒序浏览
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 骚年,不是。是少年。最近很努力啊!.

查看全部评分

回复 使用道具 举报
我认为这个程序运行是没有问题的,也基本完成了题目的要求,而且你在父类里定义了一个sayHello(),在子类里也定义了sayHello(),java编译器会认为子类的方法试图覆盖父类的方法,当然这样是没有问题的。不知道回答的对不对。共同学习吧

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 继承还要多多学习啊。

查看全部评分

回复 使用道具 举报
wu_lesley 发表于 2013-11-16 10:20
我认为这个程序运行是没有问题的,也基本完成了题目的要求,而且你在父类里定义了一个sayHello(),在子类里 ...

这道题虽然有多种解法,但是我们要找到题目的考点, 是为了考继承。
所以 你的解题思路必须围绕着继承的特性来。
那么你还认为他那题真的满足题目要求吗?

点评

FFF
+10086技术分!  发表于 2013-11-16 18:33
回复 使用道具 举报
继承为什么要使用?你这个代码没必要试用继承,根本就提现不出来继承的作用嘛。
我给你写一个例子和思路吧,希望楼主能够领悟和明白。
现有一个动物类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方法。。希望你能明白

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
谢谢大家的捧场,我做出来了{:soso_e113:}
回复 使用道具 举报
To 金牌黑马 2013-11-16 12:23:28
7#
加上Scanner,主函数调用的时候动态传入并打印才最好

点评

FFF
+10086  发表于 2013-11-16 18:28
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马