Java超详细讲解三大特性之一的多态

目录
  • 多态性
    • instanceof 关键字的使用
    • ==和equals()区别
    • object类中toString()的使用
    • static关键字的使用
  • 总结

多态性

1理解多态性:可以理解为一个事物的多种形态。

2何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)

3多态的使用:虚拟方法调用,有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法,多态性的使用前提:类的继承关系,方法的重写,总结:编译,看左边,运行,看右边。

有了对象的多态性之后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能调用,对象的多态性,只适用于方法,不适用于属性,多态性是一个运行时行为。

2.特点

多态的前提:

1.是继承,多态的前提

2.要有方法的重写

父类引用指向子类对象,如:Animal a = new Cat();

instanceof 关键字的使用

a instanceof A:判断对象a是否是类A的实例,如果是返回true,不是的话返回false,使用情境:为了避免出现异常,我们向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型 如果返回false就不进行向下转型,且instanceof并不完美,不能够查出父子类。

==和equals()区别

== : 运算符

1 .可以使用在基本数据类型变量和引用数据类型变量中,2.如果比较的是基本数据类型变量: 比较两个变量保存的数据是否相等(不一定类型要相同),如果比较的是引用数据类型变量(要保证是相同类型):比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体。

equals()方法的使用:是一个方法而非运算符,只能适用于引用数据类型。

Object类中equals()的定义:

 public boolean equals(Object obj){
​      return (this == obj);
  //重写方法 :
  public boolean  equals(object obj){
​                 if(this == obj){
​                    return true;
}
 if(obj instanceof MyDate){
 ​     MyDate  myDate =(MyDate)obj;//强转为相同类型
return this.day == myDate.day //就是比较数据是否相等
}
return false
}
}

说明: object 类中定义的equals()和==的作用都是相同的:比较两个对象的地址值是否相同,即两个引用是否指向同一个地址,

像String Data File,包装类 等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的“实体内容”是否相同。

通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的“实体内容”是否相同。那么我们就需要对object类中的 equals()进行重写。重写的原则:比较两个对象的实体内容是否相同。

object类中toString()的使用

1当我们输出一个对象的引用时候,实际上就是调用当前对象的toString(),像String Date File 包装类等都重写了object类中的toString()方法使得在调用对象的toString()方法时,返回“实体内容”信息,自定义类也可以重写toString()方法,当调用此方法时,返回对象的“实体内容“

重写toString方法:

public String toString(){
​    return  "Customer[name="+name+",age =" + age + '']"

包装类的使用:

1.java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征

2.掌握的:基本数据类型,包装类,String三者之间的相互转换

转换格式:Integer in1=new Integer(12);,包装类转换为基本数据类型:int i1 =in1.intValue();

注意:boolean型的包装类:Boolean b1 =new Boolean(“true123”);这样是错的因为是判断括号里与ture是否相同,有其他东西时则判为false,boolean是基本数据类型,Boolean则是一个类,而JDK5.0新特性有了自动装箱和自动拆箱,自动装箱:基本数据类型- - >包装类的对象

int num2 =10;

Integer in1 =num2;//自动装箱

boolean b1=true

Boolean b2 = b1 //自动装箱

static关键字的使用

static 是静态的,可以用来修饰属性,方法,代码块,内部类 ,使用static修饰属性:静态变量(类变量)

属性,按是否使用static修饰,又分为:静态属性 vs非静态属性(实例变量)实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。

static 修饰属性的其他说明:1.静态变量随着类的加载而加载。可以通过

“类.静态变量”的方式进行调用。2.静态变量的加载要早于对象的创建。3.由于类只会加载一次则静态变量在内存中也只会存在一份,存在方法区的静态域中。

例如 static String nation ,该属性则为静态的,静态的属性不需要创建对象来调用,可以直接用类来进行调用,静态变量是存储在方法区

使用static修饰方法:静态方法,1随着类的加载而加载,可以通过“类.静态方法”的方式进行调用,静态方法中,只能调用静态的方法或属性,非静态的方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性,注意点:在静态的方法内,不能使用this关键字,super关键字,关于静态属性和静态方法的使用,大家都从生命周期的角度去理解

开发中,如何确定一个方法是否要声明为static的?

操作静态属性的方法,通常设置为static的,工具类中的方法,习惯上声明为static的比如 Math Arrays Collections

总结

今天学习了java中多态的特性,方法的重写,== 和 equals()区别,nstanceof 关键字的使用, object类中toString()的使用,以及static关键字的使用。 觉得写的还不错的朋友可以三连支持一下哦~

到此这篇关于Java超详细讲解三大特性之一的多态的文章就介绍到这了,更多相关Java多态内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java单例模式继承覆盖多态原理详解

    1.单例模式: 1)提出原因 是由gof 也就是四人组提出来的.为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销.因为外面程序可以通过new的方法直接调用类里面的构造方法.导致该类的对象不止一个. 2)定义 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. A.构造方法私有化: B.对外提供一个公开的.静态的.获取当前类型对象的方法 C.提供一个当前类型的静态变量. 3)分类 A.饿汉式单例

  • java多态机制原理特点详解

    java多态机制是什么 java中实现多态的机制是依靠父类或接口的引用指向子类.从而实现了一个对象多种形态的特性.其中父类的引用是在程序运行时动态的指向具体的实例,调用该引用的方法时,不是根据引用变量的类型中定义的方法来运行,而是根据具体的实例的方法. 概念 多态就是指一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定. 因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致

  • Java多态中动态绑定原理解析

    这篇文章主要介绍了Java多态中动态绑定原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 多态是面向对象程序设计非常重要的特性,它让程序拥有 更好的可读性和可扩展性. 发生在继承关系中. 需要子类重写父类的方法. 父类类型的引用指向子类类型的对象. 自始至终,多态都是对于方法而言,对于类中的成员变量,没有多态的说法. 一个基类的引用变量接收不同子类的对象将会调用子类对应的方法,这其实就是动态绑定的过程.在理解动态绑定之前,先补充一些概念.

  • 简单了解Java多态向上转型相关原理

    这篇文章主要介绍了简单了解Java多态向上转型相关原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 多态性是面向对象的第三大特征. 多态的优点 改善代码的组织结构和可读性. 能够创建可扩展的程序.(随时可以加入新功能) 消除类型之间的耦合关系. 说实话,作为小白的我,并不太能够理解上面三个优点.随着深入学习,理解应该会越来越深吧,共勉. 向上转型 概念 Java允许把子类对象赋值给父类的引用变量,不用做任何强制转换,系统自动完成.向上转型来自

  • java中多态概念、实现原理详解

    一.什么是多态? 1.多态的定义 指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用) 2.多态的作用 消除类型之间的耦合关系 3.多态的说明 近代网络小说泛滥,我们可以用它来举一个例子 某日你看见你手机上有多部小说同时更新了,比如有大主宰,雪鹰领主,龙王传说-在这里我们可以描述成如下: 小说a=大主宰 小说b=雪鹰领主 小说c=龙王传说 - 这里所表现的就是多态,大主宰,雪鹰领主,龙王传说都是小说的子类,我们仅仅可以通过小说这个

  • Java超详细讲解三大特性之一的多态

    目录 多态性 instanceof 关键字的使用 ==和equals()区别 object类中toString()的使用 static关键字的使用 总结 多态性 1理解多态性:可以理解为一个事物的多种形态. 2何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用) 3多态的使用:虚拟方法调用,有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法,多态性的使用前提:类的继承关系,方法的重写,总结:编译,看左边,运行,

  • Java超详细讲解三大特性之一的封装

    目录 封装 封装的概念 Java中的包 java中类的成员-构造器 java中的this关键字 总结 说到面向对象则不得不提面向对象的三大特征:封装,继承,多态.那么今天就和大家先来介绍什么是封装. 封装 封装的概念 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问. 为什么需要封装? 当我们创建一个类的对象后,我们可以通过“对象.属性”的方式,对对象的属性进行赋值.这里赋值操作要受到 属性的数据类型和存储范围的制约.除此之外,没有其他制约

  • Java超详细讲解三大特性之一的继承

    目录 继承的概念 方法的重写 super关键字的使用 super调用构造器 总结 继承的概念 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量. 继承性的好处: 减少代码的重复 提高代码复用性 便于功能拓展 继承性的格式:class A extends B{} A:子类,派生类,subclass,B: 父类

  • Java 超详细讲解对象的构造及初始化

    目录 如何初始化对象 构造方法 特性 默认初始化 就地初始化 如何初始化对象 我们知道再Java方法内部定义一个局部变量的时候,必须要初始化,否则就会编译失败 要让这串代码通过编译,很简单,只需要在正式使用a之前,给a设置一个初始值就好那么对于创造好的对象来说,我们也要进行相对应的初始化我们先写一个Mydate的类 public class MyDate { public int year; public int month; public int day; /** * 设置日期: */ pub

  • Java 超详细讲解数据结构中的堆的应用

    目录 一.堆的创建 1.向下调整(以小堆为例) 2.创建堆 3.创建堆的时间复杂度 二.堆的插入和删除 1.堆的插入 2.堆的删除 三.堆的应用 1.堆排序 2.top-k问题 [求最小的K个数] 四.常用接口的介绍 1.PriorityQueue的特性 2.优先级队列的构造 一.堆的创建 1.向下调整(以小堆为例) 让parent标记需要调整的节点,child标记parent的左孩子(注意:parent如果有孩子一定先是有左孩子) 如果parent的左孩子存在,即:child < size,

  • Java 超详细讲解抽象类与接口的使用

    目录 一.抽象类 1.抽象类的语法 2.抽象类的特性 3.抽象类的作用 二.接口 1.接口的概念 2.接口使用 3.接口特性 4.实现多个接口 5.接口间的继承 6.常用的接口 (1)Comparable接口 (2)Cloneable接口 三.Object类 一.抽象类 在Java中,如果一个类被abstract修饰称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,抽象方法不用给出方法体. 1.抽象类的语法 //抽象类:被abstract修饰的类 public abstract cl

  • Java 超详细讲解数据结构中的堆的应用

    目录 一.堆的创建 1.向下调整(以小堆为例) 2.创建堆 3.创建堆的时间复杂度 二.堆的插入和删除 1.堆的插入 2.堆的删除 三.堆的应用 1.堆排序 2.top-k问题(求最小的K个数) 四.常用接口的介绍 1.PriorityQueue的特性 2.优先级队列的构造 一.堆的创建 1.向下调整(以小堆为例) 让parent标记需要调整的节点,child标记parent的左孩子(注意:parent如果有孩子一定先是有左孩子) 如果parent的左孩子存在,即:child < size, 进

  • Java超详细讲解抽象类的原理与用法

    目录 1. 抽象类是什么 2 抽象类的语法 3 抽象类都有什么特性 4 抽象类是干什么的 1. 抽象类是什么 ️给大家上一篇小作文,看完这个,你就理解了什么叫做抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的, 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. ️思考一下抽象类和类在功能上什么区别 因为抽象类是没有足够的信息去描绘一个具体的对象的,所以抽象类也就不能实例化对象 除此之外,抽象类的其它功能都是存在的,成员

  • Java 超详细讲解设计模式之中的抽象工厂模式

    目录 抽象工厂模式 1.什么是抽象工厂 2.抽象工厂模式的优缺点 3.抽象工厂模式的结构与实现 4.抽象工厂方法模式代码实现 5.抽象工厂模式的应用场景 6.抽象工厂模式的扩展 抽象工厂模式 前面文章介绍的工厂方法模式中考虑的是一类产品的生产,比如案例中的百事可乐工厂只能生产百事可乐,可口可乐工厂只能生产可口可乐,也就是说:工厂方法模式只考虑生产同等级的产品. 1.什么是抽象工厂 在现实生活中许多工厂是综合型的工厂,能生产多种类)的产品,就拿案例里面的可乐来说,在节日的时候可能会有圣诞版的可乐,

  • Java 超详细讲解IO操作字节流与字符流

    目录 IO操作 字节流 FileInputStream FileOutputStream 字节流读写案例 字符流 FileReader FileWriter 字节流与字符流的区别 IO操作 字节流 java.io.InputStream 输入流,主要是用来读取文件内容的. java.io.OutputStream 输出流,主要是用来将内容字节写入文件的. FileInputStream 该流用于从文件读取数据,它的对象可以用关键字 new 来创建. 有多种构造方法可用来创建对象. 可以使用字符串

随机推荐