Java面向对象——多态

server/2024/12/22 15:08:18/

· 即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。

· 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)。

· 多态存在的条件:

  1. 有继承关系;

  2. 子类重写父类的方法;

  3. 父类引用指向子类对象。

多态注意事项:
  1. 多条是方法的多态,属性没有多态;

  2. 父类和子类,有联系    类型转换异常:ClassCastException!

  注意,以下方法没有多态:
  1. static方法,属于类,不属于实例,所以该方法不能被重写;

  2. final  常量;无法重写;

  3. private方法  私有;无法重写。


代码演示:

java">public class Person {public void run(){System.out.println("run");}
}
java">public class Student extends Person{@Overridepublic void run() {System.out.println("son");}public void eat(){System.out.println("eat");}
}
java">import oop.demo06.Person;
import oop.demo06.Student;
//一个项目应该只存在一个main方法
public class Application {public static void main(String[] args) {//一个对象的实际类型是确定的//new Student();//new Person();//可以指向的引用类型就不确定了:父类的引用指向子类//Student子类能调用的方法都是自己的或者继承父类的Student S1 = new Student();//Person父类,可以指向子类,但是不能调用子类独有的方法Person S2 = new Student();Object S3 = new Student();//对象能执行哪些方法,主要看对象左边的类型,和右边关系不大S2.run();  //子类重写了父类的方法,就执行子类的方法S1.run();//想调用的话,用强制转换((Student) S2).eat();}
}

instanceof(类型转换)

 instanceof关键字:判断一个对象是什么类型

创建一个父类Person,子类Student、Teacher

代码演示:

java">    public static void main(String[] args) {//Object > Person > StudentObject object = new Student();System.out.println(object instanceof Student);  //trueSystem.out.println(object instanceof Person);  //trueSystem.out.println(object instanceof Object);  //trueSystem.out.println(object instanceof Teacher);  //falseSystem.out.println(object instanceof String);  //falseSystem.out.println("============================");Person person = new Student();System.out.println(person instanceof Student);  //trueSystem.out.println(person instanceof Person);  //trueSystem.out.println(person instanceof Object);  //trueSystem.out.println(person instanceof Teacher);  //false//System.out.println(person instanceof String);  编译报错System.out.println("============================");Student student = new Student();System.out.println(student instanceof Student);  //trueSystem.out.println(student instanceof Person);  //trueSystem.out.println(student instanceof Object);  //true//System.out.println(student instanceof Teacher);  编译报错//System.out.println(student instanceof String);  编译报错}

类型转换:

  1. 父类引用指向子类的对象;

  2. 把子类转换为父类,向上转型;可能丢失一些方法;

  3. 把父类转换为子类,向下转型;强制转换;

  4. 方便方法的调用,减少重复的代码。简洁

代码演示:(父类、子类同上)

java">        //类型之间的转换:父  子//高                  低Person obj = new Student();//将上面的对象转换为Student类型,就可以使用Student的方法了Student student = (Student) obj;student.go();//或((Student) obj).go();//低                   高//子类转换为父类,可能会丢失自己的一些方法Student student1 = new Student();student1.go();Person person = student1;


http://www.ppmy.cn/server/41656.html

相关文章

排序(一)----冒泡排序,插入排序

前言 今天讲一些简单的排序,冒泡排序和插入排序,但是这两个排序时间复杂度较大,只是起到一定的学习作用,只需要了解并会使用就行,本文章是以升序为例子来介绍的 一冒泡排序 思路 冒泡排序是一种简单的排序算法,它重复地遍历要排序的序列,每次比较相邻…

win7下安装python,matplotlib,numpy

最近深度学习在工作中逐渐使用,公司说必须跟上时代,没有办法,还要加紧学习。前面《深度学习入门:基于Python的理论与实现 》读了2章,准备在公司也抽时间继续读,早日读完。 公司的机器是个win7,…

Linux环境变量详解

文章目录 1. 前言2 什么是PATH环境变量3. 如何添加PATH环境变量4. 系统中的其他环境变量5. 环境变量的由来6. 环境变量的基本操作6.1 设置环境变量6.2 通过getenv获取环境变量6.3 环境变量的应用场景 7. 通过命令行参数获取环境变量 1. 前言 本篇文章将以PATH环境变量为例来对整…

go语言基础2

1.基本数据类型 Go语言是一种强类型的静态编译语言,类型是高级语言的基础,有了类型,高级语言才能对不同类型抽象出不同的运算。 Go语言内置七类基本数据类型(20个具体子类型)。 布尔类型:bool 整型&#xf…

RK3568平台开发系列讲解(SPI篇)spi_dev 驱动分析

🚀返回专栏总目录 文章目录 一、结构体二、API三、spidev驱动分析3.1、init3.2、probe3.3、spidev_write3.4、spidev_read3.5、spidev_open四、spi_register_driver分析五、spi_dev缺点沉淀、分享、成长

Mirror从入门到入神

Mirror从入门到成神 文章目录 Mirror从入门到成神简介NetworkClientRegisterPrefabConnect (string address)Disconnect ()activeactiveHost NetworkServerSpawn 简介 Mirror是一个unity网络同步框架,基于MonoBehaviour生命周期的回调的基础上进行数值的同步&#…

【计算机毕业设计】基于SSM++jsp的高校专业信息管理系统【源码+lw+部署文档+讲解】

目录 第1章 绪论 1.1 课题背景 1.2 课题意义 1.3 研究内容 第2章 开发环境与技术 2.1 MYSQL数据库 2.2 JSP技术 2.3 SSM框架 第3章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删除信息流…

Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景

目录 文章目录 目录前言与背景传统 LB 技术的局限性HDSLB 的特点和优势HDSLB 的性能参数基准性能数据对标竞品 HDSLB 的应用场景HDSLB 的发展前景参考文档 前言与背景 在云计算、SDN、NFV 高速发展并普遍落地的今天,随着上云业务的用户数量越来越多、数据中心的规模…