黑马程序员技术交流社区

标题: 史上最为详细的个人总结---抽象!看完你就懂了 [打印本页]

作者: n361204357    时间: 2015-7-18 09:58
标题: 史上最为详细的个人总结---抽象!看完你就懂了
本帖最后由 n361204357 于 2015-7-23 22:57 编辑
  1. /*
  2. 抽象:从很多对象中抽取方法声明,从而定义在一个新的类中。没有方法体的方法被称为抽象方法。有抽象方法的类被称为抽象类。
  3. 多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
  4. 原因:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。
  5. 作用:强制要求子类必须完成某些功能。
  6. 特点:
  7. 抽象类的特点:
  8. A:抽象方法和抽象类用关键字abstract表示。
  9. B:有抽象方法的类一定是抽象类(或者接口)。
  10. 抽象类中不一定有抽象方法。
  11. C:抽象类不能被实例化。
  12. 那么,怎么实例化呢?
  13. 通过子类对象进行实例化。
  14. D:如果一个类继承抽象类,那么
  15. 这个类要么本身也是抽象类。
  16. 这个类重写父类的所有抽象方法。
  17. 抽象类的成员特点:
  18. A:成员变量 可以有成员变量,也可以有常量。
  19. B:构造方法 有构造方法的。
  20. 既然不能被实例化,那么有构造方法有什么用?
  21. 可以用于子类访问父类数据前,对父类数据进行初始化。
  22. C:成员方法
  23. 可以有抽象方法,也可以有非抽象方法。

  24. 抽象方法是为了要求子类做某些事情。
  25. 非抽象方法是为了提高代码复用性,被子类继承。


  26. 格式:
  27. 抽象类的实例化其实是靠具体的子类实现的。是多态的方式。
  28. Animal a = new Cat();

  29. 注意事项:
  30. 在继承中,我们为什么有些时候,会选择父类是抽象类?
  31. 作用:强制要求子类必须完成某些功能。

  32. 多态中必须有方法的重写,其实是针对于抽象类这种情况来说的
  33. 如果不重写抽象方法 就没有意义了
  34. 抽象类可以实例化 是通过子类来实现 这种东西叫多态 也叫向下转型
  35. */
  36. abstract class Animal//有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法。
  37. {
  38. private String name;
  39. private int age;
  40. int x=20;
  41. final int y=30;
  42. public void Animal(){}
  43. public void Animal(String name,int age)
  44. {
  45. this.name=name;
  46. this.age=age;
  47. }
  48. public void setName(String name)
  49. {
  50. this.name=name;
  51. }
  52. public String getName()
  53. {
  54. return name;
  55. }
  56. public void setAge(int age)
  57. {
  58. this.age=age;
  59. }
  60. public int getAge()
  61. {
  62. return age;
  63. }
  64. public void show()
  65. {
  66. System.out.println("动物:"+name+"--年龄:"+age);
  67. }
  68. public abstract void eat();//抽象方法
  69. }
  70. class Dog extends Animal//一个类继承抽象类,要么本身是抽象类,要么就重写父类所有抽象方法。
  71. {
  72. public void Dog(){}
  73. public void eat()//每个狗吃的东西都不一样,把吃的方法提取出来,强制让子类完成功能。
  74. {
  75. System.out.println("狗吃屎");
  76. }
  77. public void speak()
  78. {
  79. int x=40;
  80. int y=50;
  81. System.out.println(x);
  82. System.out.println(y);
  83. }
  84. }
  85. class 抽象
  86. {
  87. public static void main(String[] args)
  88. {
  89. //多态
  90. Animal a=new Dog();
  91. a.setName("死狗");
  92. a.setAge(10);
  93. a.show();
  94. a.eat();
  95. //Animal a1=new Animal();//抽象类是不能实例化的
  96. Dog d=new Dog();
  97. d.speak();
  98. }
  99. }
复制代码






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