方法的重载、重写和动态链接构成了java的多态性。

1.方法的重载

同一个类中多个同名但形参有所差异的方法,在调用时会根据参数的不同做出选择。

2.方法的重写

子类中重新定义了父类的方法,有关方法重写的规则请参考文章:Java中方法重写的注意事项。

3.动态链接

动态链接出现在父类引用指向子类对象的场景。

因为子类中有一个隐藏的引用super指向父类实例,当出现父类引用指向子类对象时,子类对象就会将其隐藏的父类实例返回给该父类引用。因此,父类引用还是指向了父类实例,而不是像表面看到的那样指向了子类对象。

下面通过代码来看父类、子类的内存分配情况:

假设现在有一个父类Father,它里面的变量需要占用1M内存。有一个它的子类Son,它里面的变量需占用0.5M内存。当创建子类对象时会率先创建父类对象,并将其隐藏的引用super指向父类对象。

Father f = new Father();//系统将分配1M内存。

Son s = new Son();//系统将分配1.5M内存。

Father f1 =s;//父类引用指向子类对象,这时f1会指向子类对象中的1M内存

由于f1仅指向了子类对象中的父类实例,所以f1只能调用父类的方法,而不能调用子类的方法。但是,若子类重写了父类的方法,那么该父类引用将会调用子类的方法,而不在是父类的方法,这就是java中的动态链接。

3.1.动态链接带来的价值

JAVA里没有多继承,一个类只能有一个父类。而继承的表现就是多态,一个父类可以有多个子类,而在子类里可以重写父类的方法,每个子类里重写的代码不一样,自然表现形式也就不一样。当同一父类引用指向不同的子类实例,调用同一方法却具有不同的表现形式,这就是多态。相同的消息(也就是调用相同的方法)会有不同的结果。

举例说明:

//父类

public class Father{

//父类有一个打孩子方法

public void hitChild(){

}

}

//子类1

public class Son1 extends Father{

//重写父类打孩子方法

public void hitChild(){

System.out.println("为什么打我?我做错什么了!");

}

}

//子类2

public class Son2 extends Father{

//重写父类打孩子方法

public void hitChild(){

System.out.println("我知道错了,别打了!");

}

}

//子类3

public class Son3 extends Father{

//重写父类打孩子方法

public void hitChild(){

System.out.println("我跑,你打不着!");

}

}

//测试类

public class Test{

public static void main(String args[]){

Father father;

father = new Son1();

father.hitChild();

father = new Son2();

father.hitChild();

father = new Son3();

father.hitChild();

}

}

3.2.动态链接的总结

1、使用父类引用指向子类对象是动态链接的应用场景

2、该引用只能调用父类中定义的方法和变量 ,如果子类中重写了父类中的方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)。

3、变量不能被重写(覆盖),"重写"的概念只针对方法,如果在子类中重写父类中的变量,那么在编译时会报错。

4、父类引用指向子类实例时,方法调用采用“编译看左边,运行看右边”规则来判断。

本博文参考了:java多态性,父类引用指向子类对象

【Java_基础】java中的多态性的更多相关文章

  1. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  2. 计算机基础--Java中int char byte的关系

    计算机基础--Java中int char byte的关系 重要:一个汉字占用2byte,Java中用char(0-65535 Unicode16)型字符来存字(直接打印输出的话是字而非数字),当然要用 ...

  3. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  4. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  5. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  6. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

  7. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  8. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  9. [Java基础] Java中List.remove报错UnsupportedOperationException

    Java中List.remove(removeRange,clear类似) 报出 UnsupportedOperationException 的错误.原来该List是一个AbstractList,不支 ...

随机推荐

  1. 2018ccpc_hn

    A. Easy h-index #include <iostream> #include <algorithm> #include <cstring> #inclu ...

  2. JAVA 操作远程mysql数据库实现单表增删改查操作

    package MysqlTest; import java.sql.DriverManager; import java.sql.ResultSet; import com.mysql.jdbc.C ...

  3. [題解]luogu_P1144最短路計數

    1.無權圖最短路邊權為1 2.如果兩個點恰好不能被更新(d[y]==d[x]+1)那麼就能通過x的所有最短路到達y,所以ans[y]+=ans[x] 3.如果兩個點不能恰好被更新(d[y]>d[ ...

  4. JAVASCRIPT一维数转化为二维数组

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  5. bzoj2818: Gcd懵逼乌斯反演

    由于是单组数据,强行不分块O(n)过 线性筛部分非常神奇,用了一个奇妙的推导(懒得写了) #include <bits/stdc++.h> using namespace std; ],f ...

  6. No bean named 'springSecurityFilterChain' is defined

    1.问题 本文讨论Spring安全配置问题 - 应用程序引导过程抛出以下异常: SEVERE: Exception starting filter springSecurityFilterChain ...

  7. 接口文档管理工具rap

    git地址:  https://github.com/thx/RAP wiki : https://github.com/thx/RAP/wiki/home_cn 视频教程: http://thx.g ...

  8. 后端 node 项目工具集

    后端 node 项目工具集 editor vs code webstorm 质量检查 eslint prettier 命令行相关 better-run-npm npm-run-all nodemon ...

  9. Git 学习教程【转+总结】

    之前是在用SVN,现在因为小伙伴比较喜欢Git,所以也开始学习Git,很感谢 时光穿梭机 - 廖雪峰 的无私奉献.本文用来记录我在学习Git过程中的收获和笔记,廖雪峰大神的Git教程参考这里. 1.G ...

  10. office word excel等图标显示异常

    1.查看注册表:查看参数对应的路径被删除,计算机搜索新的文件路径更改路径即可.以此类推~ 计算机\HKEY_CLASSES_ROOT\Excel.Sheet.12\DefaultIcon 正常exce ...