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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hihi 中级黑马   /  2015-6-12 21:24  /  298 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. 一:
  2. 父类
  3. [java] public class A {
  4.      
  5.     final String name="A";

  6.     void A1(){};
  7. }

  8. 子类
  9. [java]
  10. public class AA extends A{

  11.     String name="AA";
  12.      
  13.     void AA1(){};
  14.      
  15.     public static void main(String[] args) {
  16.          
  17.         A a = new AA();
  18.         System.out.println(a.name);
  19.          
  20.         AA aa = new AA();
  21.         System.out.println(aa.name);
  22.          
  23.     }
  24. }
  25. 输出:
  26. A
  27. AA


  28. 父类子类均定义了name属性
  29. 同样实例化子类,
  30. a是父类引用
  31. aa是子类引用

  32. 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。

  33. 怎么使用子类强大的功能呢?就是子类重写父类定义的方法,然后自己在扩展

  34. 所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;

  35. 是不是很蛋疼

  36. 同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;

  37. public static void main(String[] args) {
  38.       
  39.         A a = new AA();
  40.         System.out.println(a.name);
  41.         a.A1();
  42.       
  43.         AA aa = new AA();
  44.         System.out.println(aa.name);
  45.         aa.A1();
  46.         aa.AA1();
  47.       
  48.     }
  49. A1方法在A中,A的子类AA没有重写A1方法,所以,可以访问a可以访问A1。

  50. 对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。

  51. [java]
  52. public class A {
  53.      
  54.     final String name="A";

  55.     void A1(){
  56.         System.out.println("A A1()");
  57.     };
  58. }

  59. [java]
  60. public class AA extends A{

  61.     String name="AA";
  62.      
  63.     void AA1(){
  64.         System.out.println("AA AA1()");
  65.     };
  66.      
  67.     @Override
  68.     void A1() {
  69.         // TODO Auto-generated method stub
  70.         //super.A1();
  71.      
  72.         System.out.println("AA A1()");
  73.     }
  74.      
  75.     public static void main(String[] args) {
  76.          
  77.         A a = new AA();
  78.         System.out.println(a.name);
  79.         a.A1();
  80.          
  81.     }
  82. }
  83. 输出:
  84. A
  85. AA A1()
  86. 没有执行父类的A1,如果要执行父类的A1,则需要
  87. [java]
  88. super.A1();


  89. 这正是我们需要的。

  90. 给一个简单DOTA例子

  91. 英雄基类
  92. [java]
  93. package com.jc;

  94. abstract public class Hero {

  95.      
  96.     abstract void run();

  97.     public void stop(){/****/};
  98. }
  99. SS暗影萨满-小Y
  100. [java]
  101. package com.jc;

  102. public class SS extends Hero{

  103.     @Override
  104.     void run() {

  105.         System.out.println("ss run()");
  106.     }
  107.      
  108.     @Override
  109.     public void stop() {

  110.         System.out.println("ss stop()");
  111.     }

  112. }
  113. BR蜘蛛
  114. [java]
  115. package com.jc;

  116. public class BR extends Hero{

  117.     @Override
  118.     void run() {

  119.         System.out.println("br run()");
  120.     }

  121.     @Override
  122.     public void stop() {
  123.         System.out.println("br stop");
  124.     }

  125. }

  126. 执行测试
  127. [java]
  128. package com.jc;

  129. public class Test {

  130.     @org.junit.Test
  131.     public void test1(){
  132.          
  133.         Hero br = new BR();
  134.          
  135.         br.run();
  136.         br.stop();
  137.          
  138.         Hero ss = new SS();
  139.          
  140.         ss.run();
  141.         ss.stop();
  142.          
  143.          
  144.     }
  145. }
  146. 输出:
  147. br run()
  148. br stop
  149. ss run()
  150. ss stop()
  151. 注:蜘蛛和小Y都执行了跑和停的方法,方法都是从父类继承的,但是却出现了不同的效果。
  152. 这难道不是我们正需要的吗
复制代码


7 个回复

倒序浏览
赞               
回复 使用道具 举报
赞赞赞,一百个赞,我也正好学到面向对象这块了,一起加油
回复 使用道具 举报
这个看了之后对继承又有了更深的理解
回复 使用道具 举报
学习了!!!
回复 使用道具 举报
很是全面,总结的不错
回复 使用道具 举报
觉得继承和重写,就是为了提升复用性,概念比较简单,看怎么用。
回复 使用道具 举报
学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马