java面向对象的特征三:多态性 —(15)

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

2.何为多态性:

对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
举例:
Person p = new Man();
Object obj = new Date();

3.多态性的使用:虚拟方法调用

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

4.多态性的使用前提:

① 类的继承关系 ② 方法的重写

5.多态性的应用举例:

举例一:
public void func(Animal animal){//Animal animal = new Dog();
animal.eat();
animal.shout();
}
举例二:
public void method(Object obj){

}

举例三:
class Driver{

public void doData(Connection conn){//conn = new MySQlConnection(); / conn = new OracleConnection();//规范的步骤去操作数据

// conn.method1();
// conn.method2();
// conn.method3();

}

}

6.多态性使用的注意点:

对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)


7.关于向上转型与向下转型:

7.1 向上转型:多态
7.2 向下转型:
7.2.1 为什么使用向下转型:
有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。如何才能调用子类特的属性和方法?使用向下转型。
7.2.2 如何实现向下转型:
使用强制类型转换符:()
7.2.3 使用时的注意点:
① 使用强转时,可能出现ClassCastException的异常。
② 为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。
7.2.4 instanceof的使用:
① a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false。
② 如果 a instanceof A返回true,则 a instanceof B也返回true.其中,类B是类A的父类。
③ 要求a所属的类与类A必须是子类和父类的关系,否则编译错误。
7.2.5 图示:
在这里插入图片描述

8. 面试题:

8.1 谈谈你对多态性的理解?
① 实现代码的通用性。
② Object类中定义的public boolean equals(Object obj){ }
JDBC:使用java程序操作(获取数据库连接、CRUD)数据库(MySQL、Oracle、DB2、SQL Server)
③ 抽象类、接口的使用肯定体现了多态性。(抽象类、接口不能实例化)
8.2 多态是编译时行为还是运行时行为?

1.java.lang.Object类的说明:

  • 1.Object类是所Java类的根父类
  • 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
  • 3.Object类中的功能(属性、方法)就具通用性。
  • 属性:无
  • 方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()
  • wait() 、 notify()、notifyAll()
    
    1. Object类只声明了一个空参的构造器

2.equals()方法

2.1 equals()的使用:

  1. 是一个方法,而非运算符
    1. 只能适用于引用数据类型
    1. Object类中equals()的定义:
  • public boolean equals(Object obj) {
    return (this == obj);
    }
  • 说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
    1. 像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是
  • 两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
    1. 通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们
  • 就需要对Object类中的equals()进行重写.
  • 重写的原则:比较两个对象的实体内容是否相同.
    2.2 如何重写equals()
    2.2.1 手动重写举例:
    class User{
    String name;
    int age;
    //重写其equals()方法
    public boolean equals(Object obj){
    if(obj == this){
    return true;
    }
    if(obj instanceof User){
    User u = (User)obj;
    return this.age == u.age && this.name.equals(u.name);
    }
    return false;
    }
    }
    2.2.2 开发中如何实现:自动生成的
    2.3 回顾 == 运算符的使用:
  • == :运算符
    1. 可以使用在基本数据类型变量和引用数据类型变量中
    1. 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
  • 如果比较的是引用数据类型变量:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
  • 补充: == 符号使用时,必须保证符号左右两边的变量类型一致。

3. toString()方法

3.1 toString()的使用:

  1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString()
    1. Object类中toString()的定义:
  • public String toString() {
    return getClass().getName() + “@” + Integer.toHexString(hashCode());
    }
    1. 像String、Date、File、包装类等都重写了Object类中的toString()方法。
  • 使得在调用对象的toString()时,返回"实体内容"信息
    1. 自定义类也可以重写toString()方法,当调用此方法时,返回对象的"实体内容"
      3.2 如何重写toString()
      举例:
      //自动实现
      @Override
      public String toString() {
      return “Customer [name=” + name + “, age=” + age + “]”;
      }

4.面试题:

① final、finally、finalize的区别?
② == 和 equals() 区别

* Java中的JUnit单元测试

  • 步骤:
  • 1.中当前工程 - 右键择:build path - add libraries - JUnit 4 - 下一步
  • 2.创建Java类,进行单元测试。
  • 此时的Java类要求:① 此类是public的 ②此类提供公共的无参的构造器
  • 3.此类中声明单元测试方法。
  • 此时的单元测试方法:方法的权限是public,没返回值,没形参
  • 4.此单元测试方法上需要声明注解:@Test,并在单元测试类中导入:import org.junit.Test;
  • 5.声明好单元测试方法以后,就可以在方法体内测试相关的代码。
  • 6.写完代码以后,左键双击单元测试方法名,右键:run as - JUnit Test
  • 说明:
  • 1.如果执行结果没任何异常:绿条
  • 2.如果执行结果出现异常:红条

1.为什么要有包装类(或封装类)

为了使基本数据类型的变量具有类的特征,引入包装类。

2.基本数据类型与对应的包装类:

在这里插入图片描述

3.需要掌握的类型间的转换:(基本数据类型、包装类、String)

在这里插入图片描述

简易版:

基本数据类型<—>包装类:JDK 5.0 新特性:自动装箱 与自动拆箱
基本数据类型、包装类—>String:调用String重载的valueOf(Xxx xxx)
String—>基本数据类型、包装类:调用包装类的parseXxx(String s)
注意:转换时,可能会报NumberFormatException
应用场景举例:
① Vector类中关于添加元素,只定义了形参为Object类型的方法:
v.addElement(Object obj); //基本数据类型 —>包装类 —>使用多态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 中$index $key 已移除

之前可以这样: 123456<ulid"example"><liv-for"item in items">{{$index}}{{$key}}</li></ul>现在已经移除,如果还用的话就会报错:Uncaught ReferenceError: $index is not defined; 现在这样写: 123456<ul id"example&qu…

vue-resource全攻略

Vue.js——vue-resource全攻略 概述 上一篇我们介绍了如何将$.ajax和Vue.js结合在一起使用&#xff0c;并实现了一个简单的跨域CURD示例。Vue.js是数据驱动的&#xff0c;这使得我们并不需要直接操作DOM&#xff0c;如果我们不需要使用jQuery的DOM选择器&#xff0c;就没有必要…

java面向对象:关键字 —(16)

static:静态的 1.可以用来修饰的结构&#xff1a;主要用来修饰类的内部结构 属性、方法、代码块、内部类 2.static修饰属性&#xff1a;静态变量&#xff08;或类变量&#xff09; 2.1 属性&#xff0c;是否使用static修饰&#xff0c;又分为&#xff1a;静态属性 vs 非静态…

《少年先疯队》第九次团队作业:Beta冲刺与团队项目验收

博文简要信息表&#xff1a; 项目内容软件工程https://www.cnblogs.com/nwnu-daizh/本次实验链接地址https://www.cnblogs.com/nwnu-daizh/p/11056511.html团队名称少年先疯队作业学习目标&#xff08;1&#xff09;掌握软件黑盒测试技术&#xff1b;&#xff08;2&#xff09;…

vue-resource jsonp跨域问题解决方法

最近在学习vue.js 碰到个ajax跨域请求的问题&#xff0c;之前知道可以用jsonp解决&#xff0c;但是一直没实践过&#xff0c;这次用发现里面好多问题&#xff0c;所以现在记录下来&#xff0c;希望可以给刚接触使用jsonp的同学一点帮助&#xff01; 关于什么是jsonp&#xff0c…

java面向对象:关键字 —(17)

interface:接口 1.使用说明&#xff1a; 1.接口使用interface来定义 2.Java中&#xff0c;接口和类是并列的两个结构3.如何定义接口&#xff1a;定义接口中的成员 3.1 JDK7及以前&#xff1a;只能定义全局常量和抽象方法>全局常量&#xff1a;public static final的.但是…

java面向对象:异常处理 —(18)

1. 异常的体系结构 java.lang.Throwable |-----java.lang.Error:一般不编写针对性的代码进行处理。|-----java.lang.Exception:可以进行异常的处理|------编译时异常(checked)|-----IOException|-----FileNotFoundException|-----ClassNotFoundException|------运行时异常(un…

【vue报错】——listen EADDRINUSE :::8080 解决方案

问题原因&#xff1a; 此项错误表示 8080 端口被占用 解决方案一&#xff1a; 打开cmd 输入&#xff1a;netstat -ano 查看所有端口信息&#xff0c;如图&#xff0c;找到端口 8081&#xff0c;以及对应的 PID 输入&#xff1a;tskill PID 即可杀死进程 解决方案二&#xff1a…

HTML与CSS布局技巧总结

很多人对CSS的布局有困惑&#xff0c;实际的应用场景中由于布局种类多难以选择。今天我花些时间总结下自己对CSS布局的理解&#xff0c;分析下了解各种布局的优劣&#xff0c;同时希望能分享给初入前端的朋友们一些在布局上的经验&#xff0c;如果有那些地方总结的不好&#xf…

当谈论迭代器时,我谈些什么?

花下猫语&#xff1a;之前说过&#xff0c;我对于编程语言跟其它学科的融合非常感兴趣&#xff0c;但我还说漏了一点&#xff0c;就是我对于 Python 跟其它编程语言的对比学习&#xff0c;也很感兴趣。所以&#xff0c;我一直希望能聚集一些有其它语言基础的同学&#xff0c;一…

在Vue-cli项目中使用echarts

该示例使用 vue-cli 脚手架搭建 安装echarts依赖 npm install echarts -S11 或者使用国内的淘宝镜像&#xff1a; 安装 npm install -g cnpm --registryhttps://registry.npm.taobao.org11 使用 cnpm install echarts -S11 创建图表 全局引入 main.js // 引入echarts im…

通过GitHub Pages创建个人主页

登陆github,创建新仓库&#xff0c;写入名字, 这里要以github.io做后缀, 不然创建出来的不是GitHub Pages 打开终端, cd到自己想要的文件夹后clone到本地 git clone https://github.com/username/username.github.io 进入这个项目文件夹 cd username.github.io 把写好HTML项目拷…

validate+jquery+ajax表单验证

1.案例 1.1 Html form表单内容 <form class"cForm" id"cForm" method"post" action""> <p> <label for"user">用户名</label> <input id"user" name"user" required minlen…

设置Maven下载镜像源(直接替换其中的 settings.xml 内容即可)

<?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/SETTINGS/1.0.…

P1576 最小花费

----------------------------------- 这道题就是图论最短路&#xff0c;但是我们要改一下一些细节 比如说&#xff0c;因为这是算汇率&#xff0c;我们的初始化就要是0 我们还要改一改松弛操作 ----------------------------------- 还有&#xff0c;题目上给的是汇率&#xf…

css hack技术整理

做前端多年&#xff0c;虽然不是经常需要hack&#xff0c;但是我们经常会遇到各浏览器表现不一致的情况。基于此&#xff0c;某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现。我个人是不太推荐使用hack的&#xff0c;要知道一名好的前端&#xff0c;…

Hanoi双塔问题

Hanoi双塔问题 题目描述 给定A,B,C三根足够长的细柱&#xff0c;在A柱上放有2n个中间有空的圆盘&#xff0c;共有n个不同的尺寸&#xff0c;每个尺寸都有两个相同的圆盘&#xff0c;注意这两个圆盘是不加区分的(下图为n3的情形&#xff09;。现要将 这些国盘移到C柱上&#xff…

vue中config/index.js:配置的详细理解

当我们需要和后台分离部署的时候&#xff0c;必须配置config/index.js: 用vue-cli 自动构建的目录里面 &#xff08;环境变量及其基本变量的配置&#xff09; 123456789101112131415var path require(path)module.exports {build: {index: path.resolve(__dirname, dist/ind…

uni-app吸顶固定样式

<template><view class"full"><view class"sticky-box"><!-- 搜索 --><uni-search-bar class"unisearchbar" radius"5" placeholder"请输入搜索关键词" clearButton"auto" bgColor&qu…

uni-app商品分类

<template><view class"classify"><!-- 分类部分 --><view class"cate-left"><view :class"[cate-item,activeIndexindex?active:]" v-for"(item,index) in cateList" :key"index"click"c…