`
peryou
  • 浏览: 29789 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

java多态原理和this关键字理解

阅读更多

㈠在java中经常见到多态,比如:

①List bookList=new ArrayList();

②bookList.add(1,"guohao");

③bookList.add(1,"hanshang");

那么我们说①可以灵活的换成List bookList=new LinkedList();而②③都不用改变

原因有以下几点:

⑴bookList这个对象中的方法全是List中的方法,而List中的方法子类ArrayList和LinkedList中都继承过来了,所以LinkedList中也有add这个方法,只是底层的实现方式不同,多态的核心思想就是:一个父类的方法,不同的子类有不同的实现方式,在这里具体的表现为:既可以使用数组的ArrayList实现,也可以随时换成链表的LinkedList实现。

(注:bookList这个对象是访问不到ArrayList中独有的方法的,因为父类没有权限访问子类中的方法,比如removeRange(int fromIndex, int toIndex) 这个方法是ArrayList独有的,List接口中没有这个方法,bookList就不能调用这个方法)。
⑵那么 bookList是怎么知道要去调用ArrayList的add方法而不是去调用LinkedList的add方法呢?因为

bookList=new ArrayList();执行到这句话的时候bookList中会存储一个具体的add方法的绝对地址,这个地址就是ArrayList中add方法的地址,所以在执行bookList.add(1,"guohao");这句话时,他才会非常聪明的知道具体的去调用哪个add方法。注:要点就是:对象中隐式的存储着方法的地址,所以对象知道自己要调用哪个方法,这也就是俗称的动态绑定,所谓动态绑定,就是把方法的地址存储到对象里面了。

 

①List bookList1=new ArrayList();

②List bookList2=new ArrayList();

③bookList1.add(1,"guohao");

④bookList2.add(1,"hanshang");

add方法怎么判别到底是bookList1还是bookList2调用的它自己呢?

因为:add方法其实多接受了一个参数,底层是这样的:

③bookList1.add(bookList1,1,"guohao");

④bookList2.add(bookList2,1,"hanshang");

对象把自己当做第一个参数传给了方法,所以方法才知道到底是谁调用的自己

这也是为什么this关键字只能在方法内部使用,因为add方法里面有个隐式参数bookList1(bookList1就可以用this代替)

所以static方法内不能使用this关键字:原因很明显,static方法没有隐式的参数,因为static方法不用对象调用,用类名直接调用的,也就不需要往静态方法中传递隐式的对象参数了。也就不能使用this了,因为没有隐式的参数供this代替。

分享到:
评论

相关推荐

    Java语音学习,基础教程

    掌握面向对象编程:了解类和对象的概念,学会封装、继承和多态,并理解构造器、super和this关键字的用法,以及接口和抽象类的概念和权限修饰符。 熟悉常用API:包括Date、DateFormat、Calendar、System和...

    21天学会Java之(Java SE第五篇):继承、常用的关键字、封装及权限修饰符、多态

    文章目录继承常用的关键字this关键字static关键字super关键字final关键字封装及权限修饰符封装的作用及其优点权限修饰符封装的使用细节多态多态的概念多态的使用要点对象的转型instanceof运算符类型自动提升及强制...

    java学习笔记

    封装3.private关键字4.this关键字5.构造方法6. Java Bean常用API第一部分1.引用类型的使用步骤2.Scanner类3.匿名对象4.Random类5.ArrayList集合5.String类6.static关键字7.Arrays数组工具类8.Math数学工具类继承与...

    Java面向对象继承.pdf

    继承的概念 继承是面向对象编程中的一个概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类在继承父类的同时也可以添加自己的属性和方法,从而...this关键字:调用自己的方法。

    Java入门教程(微学苑)-part1

    3.13 Java this关键字详解 49 3.14 使用this区分同名变量 49 3.15 作为方法名来初始化对象 50 3.16 作为参数传递 51 3.17 Java方法重载 52 3.18 Java类的基本运行顺序 53 3.19 Java包装类、拆箱和装箱详解 54 3.20 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    7.8 this关键字:指向对象自己的引用 177 7.8.1 发现问题:当实例变量和局部变量重名 177 7.8.2 经常深藏不露的this关键字 178 7.8.3 在方法中调用方法 179 7.9 构造方法(Constructor) 181 7.9.1 构造...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    7.8 this关键字:指向对象自己的引用 177 7.8.1 发现问题:当实例变量和局部变量重名 177 7.8.2 经常深藏不露的this关键字 178 7.8.3 在方法中调用方法 179 7.9 构造方法(Constructor) 181 7.9.1 构造...

    java基础案例与开发详解案例源码全

    5.7 this关键字148 5.8 JavaBean149 5.9 包150 5.9.1 为什么需要包?150 5.9.2 如何创建包151 5.9.3 编译并生成包:151 5.9.4 使用带包的类152 5.9.5 JDK中常用包介绍152 5.1 0本章练习153 第6章 6.1 继承156 6.1.1 ...

    java程序设计实验指导代码

    5.4 实验3 变量的作用域和this关键字 5.5 实验4 方法重载 第6章 继承和多态 6.1 预备知识 6.2 实验1 子类的派生与方法覆盖 6.3 实验2 多态性与动态绑定 6.4 实验3 嵌套类和内部类 第7章 包、接口和常用工具类...

    学习Java第十四天练习代码Day14.rar

    学习Java第十四天的练习代码,包含super关键字、继承中对象的创建、this关键字与super关键字、多态的基本应用

    AIC的Java课程1-6章

     理解和应用Java异常,常用类,IO,集合和多线程等开发技术。  课时安排  总学时:52学时  授课:48学时 (含约20学时实验)  考试:4学时  预备知识  了解和使用操作系统,...

    J2SE(javaSE基础知识).doc

    java简介、java不同版本、java特点、jdk、第一个程序、jdk、jre、jvm、eclipse配置、注释、标识符、变量、数据类型、运算符、分支语句、命名规范、循环语句、数组、main方法、面向对象、成员变量和局部变量、构造...

    Thinking in java4(中文高清版)-java的'圣经'

    5.3 缺省构造器 5.4 this关键字 5.4.1 在构造器中调用构造器 5.4.2 static的含义 5.5 清理:终结处理和垃圾回收 5.5.1 finalize()的用途何在 5.5.2 你必须实施清理 5.5.3 终结条件 5.5.4 垃圾回收器如何工作 5.6 ...

    JAVA基础课程讲义

    this关键字 65 static 关键字 66 静态初始化块(经常用来初始化类,加载类信息时执行!) 67 package 68 JDK中的主要包 68 import 68 eclipse的使用 69 继承(extend, inheritance) 70 为什么需要继承?继承的作用? ...

    JAVA学习笔记.docx

    1. 开发环境Eclipse软件的下载与配置 2. JAVA的基础知识 3. JAVA面向对象编程 (1) 编写类的步骤 (2) 对象的创建及访问对象中的属性及方法 ...4. This关键字 5. Static关键字 6. 继承、重写、多态等相关笔记

    Java面向对象程序设计笔记

    2.3.this关键字: 10 2.4.子类对象的构造和初始化: 11 2.5.方法的覆盖: 11 2.6.各种数据类型之间的相互转换: 12 3.静态成员 13 4. Final关键字: 13 5. 抽象类: 13 6. 接口 14 7. 接口与抽象类...

    《Java和Android开发实战详解》第6到10章源代码-by 南邮-陈杨

    9.2.3 匿名内层类与this和final关键字 178 9.3 多态基础 180 9.3.1 静态绑定与动态绑定 180 9.3.2 Java语言支持的多态 181 9.4 多态的实现 181 9.4.1 使用类继承来实现多态 181 9.4.2 使用接口来实现...

    corejava培训文档

    6.5. This关键字 6.6. 访问控制符 6.7. 构造方法 6.8. 数据和方法的隐藏―――封装 6.9. 方法的重载 7. 六 高级语言特性 7.1. 封装 (encapsulation) 7.2. 继承 (inherit) 7.2.1. JAVA继承特点 7.2.2. 父类...

    Java 基础核心总结 +经典算法大全.rar

    与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 ...

    java基础核心总结归纳---参考手册--心得手册-学习资料-总结经验

    与 Exception 有关的 Java 关键字 19 什么是 Error 20 内部类 20 集合 20 ArrayList 21 Vector 21 LinkedList 21 Stack 21 HashSet 22 TreeSet 22 LinkedHashSet 22 HashMap 23 集合实现类特征图 23 泛形 23 反射 24...

Global site tag (gtag.js) - Google Analytics