黑马程序员技术交流社区

标题: 抽象类实现继承的疑问? [打印本页]

作者: 严露华    时间: 2013-5-9 12:53
标题: 抽象类实现继承的疑问?
本帖最后由 严露华 于 2013-5-11 07:29 编辑

下了下面的代码,一直想不清楚如何写代码才能将接口中的lisi,18打印出来?那么抽象类实现了继承是否需要覆写方法,覆写方法后那么又如何将接口中的内容打印出来?若代码有疑问,请帮忙指出?求教?
  1. interface Person{
  2.         String name="lisi";
  3.         int age = 18;
  4.         public String say();
  5. }
  6. abstract class A implements Person
  7. {
  8.         String name;
  9.         int age;
  10.         abstract String talk();
  11.         public String say()
  12.         {
  13.                 return this.name+"-----"+this.name;
  14.         }
  15.         
  16.         
  17.         
  18. }
  19. class Student extends A
  20. {
  21.         Student(String name,int age){
  22.                 this.name = name;
  23.                 this.age = age;
  24.         }
  25.         public String talk()
  26.         {
  27.                 return "学生----姓名"+this.name+",年龄:"+this.age;
  28.         }
  29.         
  30.         
  31. }
  32. class AbstractDemo{
  33.         public static void main(String[] args){
  34.                 Student s = new Student("zahngsan", 13);
  35.                 System.out.println(s.talk());
  36.                
  37.         }
  38. }
复制代码

作者: 黑马伍哲沂    时间: 2013-5-9 13:12
所有说明,我都添加在代码注释中了。应该比较清楚,你参考下。
  1. interface Person
  2. {
  3.         static final String name="lisi";//接口中的成员变量为常量,默认为这种声明方式。不写修饰符也是。
  4.         static int age = 18;
  5.         public String say();
  6. }
  7. abstract class A implements Person
  8. {
  9. //        String name;            //这里是重新声明了成员变量。不是接口中的。所以注释掉不要。
  10. //        int age;
  11.         abstract String talk();
  12.         public String say()
  13.         {
  14.                 return this.name+"-----"+this.name;
  15.         }
  16. }
  17. class Student extends A
  18. {
  19.         Student(){}//下面自定义了构造函数,所以需要手动添加缺失的默认构造函数。
  20. //        下面代码为接口中变量赋值,因为接口中是final修饰,为常量。不可以赋值。编译错误。注释掉。
  21. //        Student(String name,int age)
  22. //        {
  23. //                        this.name = name;
  24. //                        this.age = age;
  25. //        }
  26.         public String talk()
  27.         {
  28.                         return "学生----姓名"+this.name+",年龄:"+this.age;
  29.         }
  30. }
  31. //输出结果,是接口中的值。
  32. class AbstractDemo
  33. {
  34.         public static void main(String[] args)
  35.                 {
  36.                 Student s = new Student();//此处不可以赋值,原因同上。
  37.                 System.out.println(s.talk());
  38.         }
  39. }
复制代码

作者: 刘学明       时间: 2013-5-9 13:16
额 有人回答好了 顶!
作者: 飞鸟青崖    时间: 2013-5-9 13:25
  1. interface Person{
  2.         String name="lisi";
  3.         int age = 18;
  4.         public String say();
  5. }
  6. abstract class A implements Person
  7. {
  8.                 String name;
  9.                 int age;
  10.         abstract String talk();
  11.       
  12. }
  13. class Student extends A
  14. {
  15.                 String name;
  16.                 int age;
  17.                 Student(String name,int age)
  18.                 {
  19.                         this.name = name;
  20.                         this.age = age;
  21.                 }
  22.         public String talk()//返回的是传入的值
  23.         {
  24.                 return "学生----姓名"+this.name+",年龄:"+this.age;
  25.         }   
  26.                  public String say()
  27.         {
  28.                return Person.name+"-----"+Person.age;//此处改为接口名Person
  29.                 }
  30. }
  31. class E1
  32. {
  33.         public static void main(String[] args)
  34.                 {
  35.                 Student s = new Student("zhangsan",13);
  36.                 System.out.println(s.talk());      
  37.                                 System.out.println(s.say());
  38.         }
  39. }
复制代码
抽象类中可以不覆盖接口中的方法,因为这个类本身便是抽象的,可以有抽象方法。
作者: 刘胜寒    时间: 2013-5-10 12:42
如果问题以解决,请及时修改分类。。谢谢合作




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