黑马程序员___多态的学习心得


---------------------- android培训java培训、期待与您交流! ----------------------

多态:可以理解为事物存在的多种体现形态。

1,多态的体现

      父类的引用指向了自己的子类对象。

      父类的引用也可以接收自己的子类对象。

2,多态的前提

      必须是类与类之间有关系。要么继承,要么实现。

      通常还有一个前提:存在覆盖。

 

3,多态的好处

      多态的出现大大的提高程序的扩展性。

 

4,多态的弊端:

      虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。

 

5,多态的应用

 

6,多态的出现代码中的特点(多态使用的注意事项)(需要注意,可以举例来)

 

在多态中成员函数的特点:

在编译时期:参阅引用型变量所属的类中是否有调用的方法。

如果有,编译通过,如果没有编译失败。

在运行时期:参阅对象所属的类中是否有调用的方法。

简单总结就是:成员函数在多态调用时,编译看左边,运行看右边

例子:

interface A{}

class B implements A

{

      public String test()

      {

             return "yes";

      }

}

class Demo

{

      static A get()

      {

             return new B();

      }

      public static void main(String[] args)

      {

             A a=get();

             System.out.println(a.test());

      }

}

编译失败,因为A接口中没有定义test方法(编译看左边,运行看右边)

 

 

在多态中,成员变量的特点:

无论编译和运行,都参考左边(引用型变量所属的类)。

class Fu

{

      int num=4;

      void show()

      {

             System.out.println("showFu");

      }

}

class Zi extends Fu

{

      int num=5;

      void show()

      {

             System.out.println("showZi");

      }

}

class T

{

      public static void main(String[] args)

      {

             Fu f=new Zi();

             Zi z=new Zi();

             System.out.println(f.num); //结果   4(成员变量:无论编译和运行,都参考左边)

             System.out.println(z.num);//       5

             f.show();             //       showZi(成员函数:编译看左边,运行看右边)

             z.show();           //           showZi

      }

}

在多态中,静态成员函数的特点:

无论编译和运行,都参考左边。

 

 

 

 

 

public classTestOverride{

 public staticvoid main(String[] args){

  Super s=newSub();//多态

 System.out.println(s.a); //   结果10(成员变量:无论编译和运行,都参考左边

 s.ma();             //   Sub Ma (成员函数:编译看左边,运行看右边)

 s.mb();             //   Super Static Mb静态成员函数无论编译和运行,都参考左边。)

 }

}

class Super{

 int a=10;

 public voidma(){

 System.out.println("Super Ma");

 }

 public staticvoid mb(){

 System.out.println("Super Static Mb");

 }

}

class Sub extendsSuper{

 int a=20;

 public voidma(){

 System.out.println("Sub Ma");

 }

 public static void mb(){

 System.out.println("Sub Static Mb");

 }

}

 

总结:

一。表现:

父类或者接口的引用指向了或者接收了自己的子类对象。

二。前提:

1,类与类之间要有关系。继承,实现。

2,通常都会有覆盖。

三。好处:

预先定义的程序可以运行后期程序的内容。

增强了程序的扩展性。

四。弊端:

虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。

不能预先使用子类中定义的特有功能。

五。多态的注意事项:

在代码中。

对于成员函数:Fu f = new Zi(); f.method();

编译时期:看左边。运行时期:看右边。

因为成员函数有一个覆盖操作。

对于非私有的实例变量,

静态变量,静态方法。

 

编译和运行都看左边。

 

 

六。转型。

子类对象被父类引用:子类对象在向上转型。

将指向子类对象的父类应用转换成子类类型引用:向下转型。

 

毕姥爷和毕老师的故事。

class 毕姥爷

{}

 

class 毕老师 extends 毕姥爷

{}

 

毕姥爷ly = new 毕老师();//毕老师向上转型为了毕姥爷。向上转型

 

毕老师ls = (毕老师)ly; //将代表毕老师对象的父类引用ly强制转换成了毕老师类型。向下转型。

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值