`
peryou
  • 浏览: 30689 次
  • 性别: 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代替。

分享到:
评论

相关推荐

    【独家高薪笔面试题库】与【实战配套练习演练】10.多态继承与超级关键字1

    在编程领域,特别是Java语言中,多态继承与超级关键字(super)是面向对象编程(OOP)的重要...在面试或实际项目中,理解并能够灵活运用多态、继承、super关键字和异常处理机制,将有助于解决复杂问题和提高代码质量。

    020509_【第5章:面向对象基础】_this关键字与static关键字

    面向对象编程是Java的核心特性,本章节主要探讨了两个关键概念——`this`关键字和`static`关键字。在深入理解这两个概念之前,我们先要明白面向对象编程的基本思想:封装、继承和多态。 `this`关键字在Java中用于...

    JAVA基础笔记以及关键字整理.rar

    通过阅读这份笔记,你可以系统地学习和复习Java的基础知识,加深对关键字的理解,从而提升编程技能。无论是初学者想要入门,还是专业人士希望巩固基础,这都是一个非常有价值的参考资料。记得实践是检验真理的唯一...

    java课件06Java的继承与多态.ppt

    Java继承和多态 Java中的继承和多态是面向对象...通过本节课件,学生可以掌握Java中的继承和多态机制,了解继承和多态的重要性和应用场景,并能熟练地使用extends关键字、super关键字、this关键字和final关键字等。

    Tedu一段Java多态

    ### Java多态详解 #### 一、回顾与基础概念 多态是面向对象编程语言中的一个重要特性,允许将子类类型的指针赋值给父类类型的引用,这为程序提供了极大的灵活性。根据提供的内容,我们可以从以下几个方面进行深入...

    java继承与多态

    本文将详细介绍Java中的继承和多态概念,并通过具体的示例帮助初学者更好地理解这些概念。 #### 二、继承的基础知识 **2.1 继承的定义** 继承是一种创建新类(子类)的方法,这种新类继承了已有类(父类)的特性...

    java 继承和多态的讲解

    `this`关键字在Java中用于引用当前对象,而`static`关键字用于声明类级别的变量和方法,它们不属于任何实例,而是属于类本身。例如: ```java public class MyClass { private static int count = 0; public ...

    java代码笔记2010-05-31:继承this()的使用多态;单态;静态初始化;==比较的是地址;参数传递的是个值的拷贝还是引用的传递;循环菱形

    这些知识点是Java程序员必备的基础知识,对理解和编写高效、可维护的代码至关重要。 首先,我们来谈谈`this()`关键字。在Java中,`this`是一个指向当前对象的引用。当在一个构造器中使用`this()`时,它用于调用同一...

    JAVA进阶-Java继承,多态,重写,修饰符以及super与this使用,Oject对象

    在Java编程语言中,继承、多态、重写、修饰符以及`super`和`this`的使用是面向对象编程的核心概念。这些知识点对于理解和编写高效、可维护的代码至关重要。 1. **Java继承**: Java继承允许一个类(子类)继承另一...

    Java 学习课件,继承和多态

    ### Java 学习课件:继承和多态 #### 继承的概念与应用 继承是面向对象编程的一个核心概念,它允许我们定义一类对象获取另一类对象的特性。这种机制可以减少代码冗余,增强代码复用性,并使得类之间的关系更加清晰...

    Java关键字解析.pdf

    Java关键字在编程中起着至关重要的作用,它们是语言预定义的标识符,具有特定的含义,不能...总的来说,理解并熟练运用这些关键字是Java编程的基础,它们在不同场景下发挥着关键作用,确保代码的正确性、效率和安全性。

    java关键字

    理解并熟练运用这些关键字是Java编程的基础,它们帮助我们实现各种设计模式,保证代码的可读性、可维护性和高效性。在实际开发中,应根据需求选择合适的关键字来构建类、接口、枚举等,以满足软件设计的需求。

    继承和多态笔记.docx

    - **super与this关键字**: - `super`:用来访问父类中的成员,可以调用父类的构造函数或访问父类中的成员变量和方法。 - `this`:指向当前对象的引用,用于访问当前对象的成员。 #### 多态 - **定义**:多态是...

    Java设计一个银行帐户类(继承与多态)

    在Java编程中,设计一个银行账户类是学习面向对象编程的一个常见练习,它涉及到类的定义、对象的创建以及继承和多态的概念。在这个实验中,我们创建了一个名为`BankCount`的类来代表银行账户,并包含了一系列与账户...

    2022年JAVA考试试题及答案.docx

    JAVA 考试试题及答案总结 本文档总结了 2022 年 JAVA 考试试题及答案,涵盖了 JAVA 语言基础知识...通过总结这些知识点,我们可以更好地理解 JAVA 语言的基础知识和面向对象编程的概念,并且更好地应用于实际编程中。

    java关键字。必须记的

    ### Java关键字详解 #### Abstract `abstract` 是Java中的一个关键字,用于定义抽象类或抽象方法。抽象类是不能被实例化的类,主要用于提供子类一个基础模板,并强制子类去实现某些特定的方法。抽象方法是没有实现...

    Java SE编程入门教程 java封装继承多态(共56页).pptx

    在Java中,`extends`关键字用于实现继承,多态则通过方法重写和抽象类/接口来实现。 3. **类和对象**:类是对象的蓝图,它定义了对象的属性(变量)和行为(方法)。对象是类的实例,具有类定义的属性和方法。Java...

    java关键字的使用详情

    13. **this**和**super**: `this`关键字用于引用当前对象,`super`用于引用父类的实例。 14. **default**: 在枚举类型和接口中,`default`关键字用于定义默认的方法。 这些关键字在Java编程中起着至关重要的作用,...

    Java面向对象的学习(关键字)

    本文将深入探讨`super`和`this`两个关键字的使用,以及访问权限修饰符和方法重写的重要知识点。 首先,`super`关键字代表父类的对象,它用于在子类中访问父类的成员变量或方法。与之相对的是`this`关键字,它指代...

    JAVA基础-第4章继承与多态-练习题-200910.doc

    这道题考察了静态方法和实例方法的知识,this关键字的使用和方法调用顺序。 本资源涵盖了JAVA基础的多个知识点,包括继承、多态、构造方法、方法覆盖和final类等。通过本资源,程序员可以加深对JAVA语言的掌握,...

Global site tag (gtag.js) - Google Analytics