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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋文辉 中级黑马   /  2015-1-25 23:44  /  976 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. //继承
  2. class Student{
  3.         String name;
  4.         int age;
  5.         void student(){
  6.                 System.out.println("good study");
  7.         }
  8. }
  9. class woker{
  10.         String name;
  11.         int age;
  12.         void woker(){
  13.                 System.out.println("good work");
  14.         }
  15. }
  16. /*将学生和工人的共性描述提取出来,单独进行描述。
  17. 只要让学生和工人与单独描述的这个类有关系,就可以了。
  18. */
  19. class person(){
  20.         String name;
  21.         int age;
  22. }
  23. class student extends person{
  24.         System.out.println("good student");
  25. }
  26. clsaa worker extends person{
  27.         System.out.println("good work");
  28. }
  29. /*继承:
  30. 1.提高代码的复用性。
  31. 2.让类与类产生了关系,有了这个关系,才有了多态的特性

  32. 注意:不要为了获取其他类的功能,简化代码而继承,
  33. 必须要类与类之间所属关系才可以继承。
  34. 例如:
  35. class A{
  36.         void s1(){}
  37.         void s2(){}
  38. }
  39. class B{
  40.         void s1(){}
  41.         void s3(){}
  42.        
  43. }
  44. A与B之间就没有继承关系,但是是可以将他们的共性抽取出来,创建一个C.
  45. class C{
  46.         void s1(){}
  47. }
  48. 这样A,B与C之间就存在继承关系,A,B为子类,C为父类。
  49. class A extends C{
  50.         //void s1(){}
  51.         void s2(){}
  52. }
  53. class C{
  54.         //void s1(){}
  55.         void s3(){}
  56.         java语言中,Java只支持单继承,不支持多继承。
  57.         形象说法就是:一个孩子只能有一个父亲,而一个父亲可以有多个孩子。
  58.         因为多继承容易带来安全隐患。当功能内容不同是,子类对象不确定要运行哪一个。
  59.         例如:
  60.         class A{
  61.         void s1(){}
  62. }
  63. class B{
  64.         void s1(){}
  65. }
  66. class C Bextens A,B{}
  67. C就无法确定是继承A还是B.
  68. java支持多层继承。即C继承B,B又继承A.也就是一个继承体系。
  69. 如何使用一个继承体系中的功能?

  70. 想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能。通过了解共性功能
  71. 就可以知道该体系的基本功能。
  72. 那么这个体系已经基本可以使用了
  73. 那么在具体调用是,要创建最子类对象,一是因为有可能父类不能创建对象。
  74. 二是创建子类对象可以使用更多的功能,包括基本的也包括特有的。

  75. 总结:查阅父类功能,创建子类使用功能。
  76. */
  77. /*
  78. 子父类出现后,类成员的特点:
  79. 类中成员:
  80. 变量 。
  81. 函数
  82. 构造函数

  83. 1.变量
  84. 如果子类中出现非私有的同名变量,
  85. 子类要访问本类中的变量,用this,
  86. 访问父类中的同名变量用super。
  87. this 代表本类对象的应用,
  88. super代表父类对象的引用。
  89. */


  90. class Fu{
  91.          int num=4;
  92. }
  93. clsaa Zi extends Fu{
  94.         int num=5;
  95.         void show(){
  96.         System.out.print(super.num);
  97.         }
  98. }
  99. class NO2{
  100.         public static void main{
  101.                 Zi z=new Zi();
  102.                 //System.out.print(z.num);//此时打印的是子类的5
  103.                 z.show();
  104.         }
  105. }
  106. /*子父类中的函数
  107. 当子类出现和父类一抹一样的函数时
  108. 当子类对象调用该函数,会运行子类函数内容
  109. 如同父类函数被覆盖一样。
  110. 这种情况是函数的另一个特性:重写(覆盖)
  111. 当子类继承父类,但子类虽然具备父类功能,但功能内容却和父类不一样,
  112. 这时,没必要定义新功能,而是使用覆盖特殊,保留父类功能。

  113. 覆盖:1.子类覆盖父类,要保证子类权限大于等于父类权限,才可以覆盖。
  114. 2.静态只能覆盖静态

  115. 重载只看同名函数的参数列表
  116. 重写 子类父类方法要一样*/

  117. class Fu{
  118.         void show(){
  119.                 System.out.print("fu");
  120.         }

  121. }
  122. clsaa Zi extends Fu{
  123.         //private 不能加
  124.         void show(){
  125.                 System.out.print("zi");
  126.         }
  127.         /*void shou1(){
  128.                 System.out.print("zi")
  129. }//没必要定义*/
  130. class NO2{
  131.         public static void main(String[] args){
  132.                 Zi z=new Zi();
  133.                 z.show();//显示"zi"
  134.         }
  135. }
  136. /*子父类中的构造函数
  137. 在对子类对象进行初始化时,父类的构造函数也会进行。
  138. 因为子类的构造函数默认第一行有一条隐式语句 super();
  139. super();会访问父类中的空参数构造函数,且子类中所有的构造函数默认第一行都是super()

  140. 子类为什么要访问父类构造函数;
  141. 因为父类中国的数据子类可以直接获取,所以子类对象建立时,
  142. 要先查看父类是如何对子类这些数据进行初始化的,
  143. 所以子类在对象初始化时,要先访问父类中的构造函数。
  144. 如果要访问父类中制定的构造函数,可以通过手动定义super语句来制定。


  145. 总结;子类所有的构造函数默认都会访问父类中空参数构造函数。
  146. 因为 子类每一个构造函数内的第一喊都有一句隐式super();
  147. 当父类中没有空参数的构造函数是,子类必须手动通过super语句形式来指定要访问
  148. 父类的中的构造函数。
  149. 当然,子类的构造函数第一行业可以手动指定this语句来访问本类中的构造函数,子类中
  150. 至少有一个构造函数会访问父类中的构造函数。
  151. */


  152. class Fu{
  153.         Fu(){
  154.                 System.out.print("fu");
  155.         }
  156. }
  157. class Zi extends Fu{
  158.         Zi(){
  159.                 //super();
  160.                 System.out.print("Zi");
  161.         }
  162. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马