多态:一个对象相应着不同类型

多态在代码中的体现:父类或接口的引用指向其子类对象。

多态的优点:

提高了代码的扩展性,前期定义的代码能够使用后期的内容。

多态的弊端:

前期定义的内容不能使用后期子类中定义的特有内容。

多态的前提:

1,必须有关系,(继承。实现)。

2,要有覆盖。

Animal a =new Cat();

自己主动类型提升,猫对象提升了动物类型。可是特有功能无法訪问。能够限制对特有功能的訪问。

专业讲:向上转型。将子类型隐藏。就不能使用子类的特有方法。

假设还想用详细动物猫的特有功能,能够将该对象进行向下转型。目的是为了使用子类中的特有方法。

Cat c = (Cat)  a;

注意:对于转型,自始至终都是子类对象在做着类型的变化。

if (a instanceof Cat){
Cat c=(Cat) a;
}

instanceof:用于推断对象的详细类型(类或是接口)。仅仅能用于引用数据类型推断。

通常在向下转型前用于健壮性的推断。

多态时,成员的特点:

1。成员变量

编译时:參考引用型变量所述的类中是否有调用的成员变量,有,编译通过,没有编译失败。

执行时:參考引用型变量所述的类中是否有调用的成员变量,并执行该所属类中的成员变量。

简单说:编译和执行都參考等号左边。

2,成员函数(重点)非静态

编译时:參考引用型变量所述的类中是否有调用的成员函数,有,编译通过,没有编译失败。

执行时:參考的是对象所述的类中是否有调用的函数。动态绑定

简单说:编译看左边,执行看右边。

样例:

class Outer
{
void method(){
Object obj =new Object(){
public void show(){
System.out.println("show run");
}
};
obj.show();//错误提示,找不到符号
//由于匿名内部类这个子类对象被向上转型成了Object类型。这样就不能再使用子类的特有方法了
}
}
class InnerClass
{
public static void main(String [] args)
{
new Outer().method();
}
}

3,静态函数

编译时:參考引用型变量所述的类中是否有调用的静态方法,有,编译通过。没有编译失败。

执行时:參考引用型变量所述的类中是否有调用的静态方法。

简单说:编译和执行都看左边。

事实上对于静态方法,是不须要对象的。直接用类名调用就可以。

最新文章

  1. ca 自签名证书 并实现HAProxy https功能
  2. jqGrid subGrid配置 如何首次加载动态展开所有的子表格
  3. 反汇编一个dos软盘的启动扇区
  4. 如何生成excel文件作为图像识别结果
  5. gridview自定义表头
  6. ASP.NET页面生命周期总结(2)
  7. iOS图片拉伸技巧-李明杰分享
  8. Initialising Memories
  9. Jquery EasyUI tabs处理
  10. oracle xe 数据库用户操作
  11. 在Simplicity Studio下创建适用于EFR32的工程项目
  12. Android or Java的回调粗俗理解 这才是最通俗易懂的
  13. Linux学习之路2-linux系统烧写
  14. 【XSY3320】string AC自动机 哈希 点分治
  15. Imcash平台测评报告
  16. C++ LocalAlloc() & LocalSize() & LocalFree ()
  17. Linux下批量杀掉筛选进程
  18. C++ 常用算法
  19. 4:JavaScript中的对象
  20. hdu 5018

热门文章

  1. [GraphQL] Mutations and Input Types
  2. android setCookie 免登录
  3. hive 配置注意事项及初始化hive 元数据
  4. 数据结构 - 归并排序(merging sort) 具体解释 及 代码
  5. vi 调到第一行,或最后一行
  6. CodeForcess--609B--The Best Gift(模拟水题)
  7. pyCrypto python 3.5--转
  8. Exception异常常见属性
  9. SQL Server数据库性能优化
  10. Centos7 minimal 系列之rabbitmq的理解(九)