多态

面向对象的三大特征:
1.封装
2.继承
3.多态
多态:一个对象具备多种形态(父类的引用类型变量指向了子类的对象 或者 接口的引用类型变量指向了接口实现类的对象)
多态的前提:必须存在继承或者继承的关系
多态要注意的细节:
1.多态情况下,子父类存在同名的(静态和非静态)成员变量时,访问的是父类的成员变量
2.多态情况下,子父类存在同名的非静态成员函数时,访问的是子类的成员函数
3.多态情况下,子父类存在同名的静态成员函数时,访问的是父类的成员函数
4.多态情况下,不能访问子类特有的成员(成员变量和成员方法)
总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名的非静态函数时才是访问子类的
编译看左边(解释第3点),运行不一定看右边(解释总结的话)
编译看左边:java编译器在编译的时候,会检查引用类型变量所属的类是否具备指定的 成员,如果不具备马上编译报错
  
  
  1. /**
  2. * Author:Liu Zhiyong
  3. * Version:Version_1
  4. * Date:2016年4月24日17:19:47
  5. * Desc:
  6. 面向对象的三大特征:
  7. 1.封装
  8. 2.继承
  9. 3.多态
  10. 多态:一个对象具备多种形态(父类的引用类型变量指向了子类的对象 或者 接口的引用类型变量指向了接口实现类的对象)
  11. 多态的前提:必须存在继承或者继承的关系
  12. 多态要注意的细节:
  13. 1.多态情况下,子父类存在同名的(静态和非静态)成员变量时,访问的是父类的成员变量
  14. 2.多态情况下,子父类存在同名的非静态成员函数时,访问的是子类的成员函数
  15. 3.多态情况下,子父类存在同名的静态成员函数时,访问的是父类的成员函数
  16. 4.多态情况下,不能访问子类特有的成员(成员变量和成员方法)
  17. 总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名的非静态函数时才是访问子类的
  18. 编译看左边(解释第3点),运行不一定看右边(解释总结的话)
  19. 编译看左边:java编译器在编译的时候,会检查引用类型变量所属的类是否具备指定的
  20. 成员,如果不具备马上编译报错
  21. */
  22. interface A
  23. {
  24. int a =1;
  25. public void print();
  26. }
  27. class Animal
  28. {
  29. String name;
  30. static String color = "动物颜色";//1.多态情况下,子父类存在同名的(静态和非静态)成员变量时,访问的是父类的成员变量
  31. public Animal(String name){
  32. this.name = name;
  33. }
  34. public void eat(){
  35. System.out.println(name + "动物吃吃吃吃。。。。");
  36. }
  37. }
  38. class Mouse extends Animal
  39. {
  40. static String color = "老鼠颜色";
  41. String bb = "hhh"; //特有的成员变量
  42. public Mouse(String name){
  43. super(name);
  44. }
  45. public void eat(){
  46. System.out.println(name + "老鼠吃大米。。。。");
  47. }
  48. public void dig(){ //特有的成员函数
  49. System.out.println(name + "打洞。。。。");
  50. }
  51. }
  52. class Demo55 implements A
  53. {
  54. public void print(){
  55. }
  56. public static void main(String[] args)
  57. {
  58. Animal animal = new Mouse("老鼠");
  59. System.out.println(animal.color);
  60. // System.out.println(animal.bb);
  61. animal.eat();
  62. // animal.dig();
  63. }
  64. }
多态的应用:
1.多态用于形参类型的时候,可以接收更多类型的数据
2.多态用于返回值类型的时候,可以返回更多类型的数据
多态的好处: 提高了代码的拓展性
   
   
  1. /**
  2. * Author:Liu Zhiyong
  3. * Version:Version_1
  4. * Date:2016年4月24日21:26:34
  5. * Desc:
  6. 多态的应用:
  7. 1.多态用于形参类型的时候,可以接收更多类型的数据
  8. 2.多态用于返回值类型的时候,可以返回更多类型的数据
  9. 多态的好处:提高了代码的拓展性
  10. */
  11. abstract class Myshape
  12. {
  13. public abstract void getArea();
  14. public abstract void getCircumference();
  15. }
  16. class Circle extends Myshape
  17. {
  18. public static final double PI = 3.14;
  19. double r;
  20. public Circle(double r){
  21. this.r = r;
  22. }
  23. public void getArea(){
  24. System.out.println("圆形面积:" + PI*r*r);
  25. }
  26. public void getCircumference(){
  27. System.out.println("圆形周长:" + 2*PI*r);
  28. }
  29. }
  30. class Rect extends Myshape
  31. {
  32. double width;
  33. double height;
  34. public Rect(double width, double height){
  35. this.width = width;
  36. this.height = height;
  37. }
  38. public void getArea(){
  39. System.out.println("矩形面积:" + width*height);
  40. }
  41. public void getCircumference(){
  42. System.out.println("矩形周长:" + 2*(width+height));
  43. }
  44. }
  45. class 梯形 extends Myshape
  46. {
  47. public void getArea(){
  48. System.out.println("梯形面积:" );
  49. }
  50. public void getCircumference(){
  51. System.out.println("梯形周长:" );
  52. }
  53. }
  54. class Demo56
  55. {
  56. public static void main(String[] args)
  57. {
  58. Circle c = new Circle(2);
  59. print(c);
  60. Rect rect = new Rect(1, 1);
  61. print(rect);
  62. 梯形 t = new 梯形();
  63. print(t);
  64. Myshape my = getShape(11);
  65. print(my);
  66. }
  67. //需求1:定义一个函数可以接收任意类型的图形对象,并且打印图形的面积与周长
  68. public static void print(Myshape myshape){//Myshape myshape = new Rect(1,1); //这就是多态
  69. myshape.getArea();
  70. myshape.getCircumference();
  71. }
  72. //需求2:定义一个函数可以返回任意类型的图形对象。
  73. public static Myshape getShape(int i){
  74. if(i == 0){
  75. return new Circle(4);
  76. }else{
  77. return new Rect(1, 1);
  78. }
  79. }
  80. }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值