转继承的概念和特征:Java中继承的概念 子类例子化过程 super()及思路方法复写

继承是OOP 3大特点的. 这节主要做下继承笔记.

1. 继承概念及使用

在Java中,通过继承可以简化类定义,扩展类功能. Java中支持类单继承和多层继承,但是不支持多继承,即: 个类只能继承个类而不能继承多个类.

实现继承格式为: 子类名 extends 父类

Java中继承只能直接继承父类中公有属性和公有思路方法,而隐含地(不可见地)继承了私有属性. 继承内容如下图:

继承<img src='/icons/60914de.gif' />父类内容

2. 子类对象例子化过程

子类对象在例子化时,需要注意是: 子类对象例子化会默认先父类中无参构造,然后再子类构造思路方法. 例如下面例子代码:

view plaincopy to clipboardpr?

    ="dp-j">
  1. ="alt">="keyword">Person
  2. ="">{
  3. ="alt">="keyword">privateStringname;
  4. ="">="keyword">private="keyword">age;
  5. ="alt">
  6. ="">="comment">//父类无参构造思路方法
  7. ="alt">="keyword">publicPerson
  8. ="">{
  9. ="alt">.out.prln(="">"父类中构造思路方法");
  10. ="">}
  11. ="alt">="comment">//getter和ter思路方法
  12. ="">="keyword">publicStringgetName
  13. ="alt">{
  14. ="">="keyword">="keyword">this.name;
  15. ="alt">}
  16. ="">="keyword">public="keyword">voidName(Stringname)
  17. ="alt">{
  18. ="">="keyword">this.name=name;
  19. ="alt">}
  20. ="">="keyword">public="keyword">getAge
  21. ="alt">{
  22. ="">="keyword">="keyword">this.age;
  23. ="alt">}
  24. ="">="keyword">public="keyword">voidAge(="keyword">age)
  25. ="alt">{
  26. ="">="keyword">this.age=age;
  27. ="alt">}
  28. ="">="comment">//返回信息思路方法
  29. ="alt">="keyword">publicStringgetInfo
  30. ="">{
  31. ="alt">="keyword">="">"姓名是:"+name+="">",年龄是:" +age;
  32. ="">}
  33. ="alt">}
  34. ="">="keyword">Student="keyword">extendsPerson
  35. ="alt">{
  36. ="">="keyword">privateStringschool=="">"软件Software学院";
  37. ="alt">="comment">//子类无参构造思路方法
  38. ="">="keyword">publicStudent
  39. ="alt">{
  40. ="">Name(="">"saon");
  41. ="alt">Age(="number">23);
  42. ="">.out.prln(="">"子类中构造思路方法");
  43. ="alt">}
  44. ="">="keyword">public="keyword">voidpr
  45. ="alt">{
  46. ="">.out.prln(getInfo+="">",学校是:"+school);
  47. ="alt">}
  48. ="">}
  49. ="alt">="keyword">public="keyword">Demo01
  50. ="">{
  51. ="alt">="keyword">public="keyword">="keyword">void(Stringargs)
  52. ="">{
  53. ="alt">="comment">//使用子类对象
  54. ="">Students=="keyword">Student;
  55. ="alt">s.pr;
  56. ="">}
  57. ="alt">}




3.super思路方法和类思路方法复写机制

3.1 super思路方法

在上面例子中, 实际上在子类Student构造思路方法中隐含了个super思路方法. 该思路方法表示父类(即超类)构造思路方法. 需要注意是,我们也可以使用super(参数类型 参数名, 参数类型 参数名, ...)这样格式来父类重载后含参构造思路方法. 下面例子中用到了这种super思路方法.

3.2 子类对父类思路方法复写

子类可以继承父类思路方法,也可以复写父类思路方法. 但复写父类思路方法有个基本前提: 所复写思路方法不能有比父类思路方法更严格访问权限. (访问权限 public > default > private)

子类复写父类<img src='/icons/60914de.gif' />思路方法

这里举例子,在该例子中, 子类Student以super(name,age)形式父类构造思路方法,同时子类以不变权限复写了父类getInfo思路方法:

view plaincopy to clipboardpr?

    ="dp-c">
  1. ="alt">="keyword">Person
  2. ="">{
  3. ="alt">="keyword">privateStringname;
  4. ="">="keyword">private="keyword">age;
  5. ="alt">="comment">//希望在Person类构造思路方法时候可以直接为属性
  6. ="">="keyword">publicPerson(Stringname,="keyword">age)
  7. ="alt">{
  8. ="">="keyword">this.Name(name);
  9. ="alt">="keyword">this.Age(age);
  10. ="">}
  11. ="alt">="comment">//私有属性要加入ter和getter操作就可以访问了
  12. ="">="keyword">public="keyword">voidName(Stringname)
  13. ="alt">{
  14. ="">="keyword">this.name=name;
  15. ="alt">}
  16. ="">="keyword">public="keyword">voidAge(="keyword">age)
  17. ="alt">{
  18. ="">="keyword">this.age=age;
  19. ="alt">}
  20. ="">="keyword">publicStringgetName
  21. ="alt">{
  22. ="">="keyword">="keyword">this.name;
  23. ="alt">}
  24. ="">="keyword">public="keyword">getAge
  25. ="alt">{
  26. ="">="keyword">="keyword">this.age;
  27. ="alt">}
  28. ="">="keyword">publicStringgetInfo
  29. ="alt">{
  30. ="">="keyword">="">"姓名="+="keyword">this.name+="">"年龄="+="keyword">this .age;
  31. ="alt">}
  32. ="">}
  33. ="alt">="comment">//和Person类相比是扩充了Person类功能所以此处继承即可
  34. ="">="keyword">StudentextendsPerson
  35. ="alt">{
  36. ="">="keyword">privateStringschool;
  37. ="alt">
  38. ="">="keyword">publicStudent(Stringname,="keyword">age,Stringschool)
  39. ="alt">{
  40. ="">="comment">//super;//-->隐含代码
  41. ="alt">="comment">//此时最好可以明确指出要父类中有两个参数构造思路方法
  42. ="">="comment">//直接指明父类中有两个参数构造思路方法
  43. ="alt">super(name,age);
  44. ="">="keyword">this.School(school);
  45. ="alt">}
  46. ="">="keyword">public="keyword">voidSchool(Stringschool)
  47. ="alt">{
  48. ="">="keyword">this.school=school;
  49. ="alt">}
  50. ="">="keyword">publicStringgetSchool
  51. ="alt">{
  52. ="">="keyword">="keyword">this.school;
  53. ="alt">}
  54. ="">="comment">//子类覆写了父类中getInfo思路方法
  55. ="alt">="keyword">publicStringgetInfo
  56. ="">{
  57. ="alt">="comment">//父类中getInfo思路方法,使用super.思路方法名格式
  58. ="">="keyword">super.getInfo+="">"学校="+="keyword">this.school;
  59. ="alt">}
  60. ="">}
  61. ="alt">="keyword">public="keyword">Demo02{
  62. ="">="keyword">public="keyword">="keyword">void(Stringargs)
  63. ="alt">{
  64. ="">="comment">//使用子类对象
  65. ="alt">Students=="keyword">Student(="">"saon",23,="">"软件Software学院");
  66. ="">. ="keyword">out.prln(s.getInfo);
  67. ="alt">}
  68. ="">}

Tags:  继承权的概念与特征 继承的概念 继承的概念与特征 转继承的概念和特征

延伸阅读

最新评论

发表评论