【Java面向对象】java学习之旅15-多态

头歌平台Java实验:Java面向对象 - 封装、继承和多态 就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。良好的封装能够减少耦合。类内部的结构可以自由修改。可以对成员进行更精确的控制。隐藏信息,实现细节。封装把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。编程要求根据提示,在右侧编辑器Begin-End。 阅读详情

定义:

相同的方法可以表现出多种形态,这样的现象就叫多态。

前提:

  1. 继承
  2. 重写
  3. 父类引用指向子类对象

向上转型和向下转型:

  1. 向上转型:隐式的,创建对象时父类引用指向子类对象,实参为子类对象形参为父类引用
  2. 向下转型:显式的,创建对象时必须是父类引用指向子类对象,才可以向下转型成对应的子类对象。instanceof可以判断父类引用所指的对象是否可以向下转型为指定的类

优点:

  1. 提高扩展性
  2. 便于实现替换
  3. 提高代码可维护性
  4. 允许父类引用指向子类对象,解除了引用和对象的耦合

注意事项:

  1. 多态只和方法有关,和属性无关
  2. 构造方法和private方法由于不能被重写所以无法使用多态
  3. 父类引用指向子类对象,使用父类引用只能调用父类中定义过的方法,不能调用子类特有的方法。

下面用打印机来说明多态:

/**
 * 打印机(父类)
 */
public class Printer {
	
	private String name;

	public Printer() {
		super();
	}
	public Printer(String name) {
		super();
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "Printer [name=" + name + "]";
	}
	
	//有一个自身的打印方法
	public void print() {
		System.out.println("打印");
	}
}
/**
 * 黑白打印机(子类)
 */
public class BlackAndWhitePrinter extends Printer {

	public BlackAndWhitePrinter() {
		super();
	}

	public BlackAndWhitePrinter(String name) {
		super(name);
	}

	@Override
	public void print() {
		System.out.println("打印黑白文档");
	}
	
}

/**
 * 彩色打印机(子类)
 */
public class ColorsPrinter extends Printer {

	public ColorsPrinter() {
		super();
	}

	public ColorsPrinter(String name) {
		super(name);
	}

	@Override
	public void print() {
		System.out.println("打印彩色文档");
	}
	
}

下面建一个打印工人类来使用打印机:

/**
 * 打印工人类
 * 
 * @author junki
 * @date 2019年11月26日
 */
public class Worker {

	private String name;

	public Worker() {
		super();
	}
	public Worker(String name) {
		super();
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "Worker [name=" + name + "]";
	}
	
	//使用打印机的方法
	public void usePrinter(Printer p) {
		if (p instanceof BlackAndWhitePrinter) {
			p.print();
		} else {
			System.out.println("这个打印机我不会用");
		}
	}
	
}

在主方法中我们可以使用多态:

public static void main(String[] args) {
		
		BlackAndWhitePrinter bawp = new BlackAndWhitePrinter();
		bawp.print();
		
		ColorsPrinter cp = new ColorsPrinter();
		cp.print();
		
		
		Printer p1 = new BlackAndWhitePrinter();// 向上转型
		Printer p2 = new ColorsPrinter();
		
		p1.print();
		p2.print();
		
		Worker worker = new Worker();
		ColorsPrinter printer1 = new ColorsPrinter();
		BlackAndWhitePrinter printer2 = new BlackAndWhitePrinter();
		//在这里可以看到,工人中我们只使用了父类对象作为参数,而在调用中,
		//我们往参数里面传进子类对象,调用的是子类重写的方法,这就是多态。
		worker.usePrinter(printer1);// 向上转型
		
		
		// 向下转型错误演示
		// ClassCastException
		Printer p3 = new Printer();
		//ColorsPrinter cp3 = (ColorsPrinter) p3;
		
		Printer p4 = new ColorsPrinter();
		ColorsPrinter cp4 = (ColorsPrinter) p4;
		cp4.print();
		
	}

总结:

是方法的多态,父类定义一个方法,子类可以有不同的重写,然后只需要在形参放入父类对象,子类可以随意往形参中放入自己的对象,又称叫做向上转型

java PrinterJob 操作打印机 java PrinterJob 操作打印机 图片的打印 打印的预览 多页打印的使用 立即下载

相关推荐

jacob.jar-java调用打印机API

(1)首先将JACOB的DLL拷贝至 C:\Windows\System32 中 (2)DCom Server Process Launcher(DcomLaunch)服务需要打开[services.msc] (3)需要安装Microsoft office 2003+ 打印属性参见 "http://msdn.microsoft.com/zh-cn/library/office/ff838253.aspx" target="PrintOut 方法 (Excel)

Java面向对象案例之打印机对象Printer(1)

Java面向对象案例练习打印机类Printer

码到家 663

java PrinterJob 打印

java打印demo、有printerJob 类、PrinterJob.createPrinterJob

java 打印机类printer_Spring案例打印机的实现过程详解

这篇文章主要介绍了Spring案例打印机的实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下目录:1.applicationContext.xml配置文件xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springfra...

weixin_35843523的博客 1175

javaprint API使用手册

Java Print Service (JPS)是一个Java打印API,设计此API是为了支持在所有Java平台上的打印工作

Cesium生态盘点:超图、火星3D等15个二次开发框架对比

本文深入解析Cesium生态中的15个二次开发框架,包括超图、火星3D等主流选择,帮助开发者根据项目需求进行精准选型。从性能表现、功能完备性、开发友好度等维度进行对比,特别适合需要处理地理空间数据和构建三维可视化的JavaScript开发者。

weixin_28197941的博客 497

java 打印机类printer_基于java.awt.print.*定义PrinterUtil打印工具类实现对图形图像的打印代码示例...

一、前言通过java.awt.print.*定义PrinterUtil打印机工具类,实现对图形图像输出打印,详情代码示例。二、代码示例packagetest;@b@@b@importjava.awt.Graphics;@b@importjava.awt.Image;@b@importjava.awt.print.Book;@b@importjava.awt.print.PageForma...

weixin_35516273的博客 782

全国各省份影像下载地址(11级别)

cesium中使用urltemplate加载,leaflet中使用tile加载,具体加载有问题可以给我留言。

资深三维GIS开发 5141

java调用打印机的两种方式

一、用java中自带的PrintServiceLookup实现 import javax.imageio.ImageIO; import javax.print.*; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; ...

雾朦胧 2万+

利用LTspice设计Pt100测温电路

是一种广泛使用的温度传感器,它属于(RTD, Resistance Temperature Detector)的类型,通常用于温度测量。在0°C时,的电阻值为100欧姆,且它的电阻值会随着温度的升高而升高。PT100热电阻温度阻值对应表)因此可以根据这一特性来检测出环境温度。

2301_77033628的博客 2412

紫光同创PGL50H开发板PCIE通信保姆级教程:从IP核安装到Windows设备管理器识别

本文详细介绍了紫光同创PGL50H开发板PCIE通信的全流程,从IP核安装到Windows设备管理器识别。通过环境搭建、工程配置、管脚约束、固件烧录等步骤,帮助开发者快速掌握FPGA与PCIE通信技术,解决实际开发中的常见问题,提升开发效率。

weixin_30500473的博客 433

Java编程基础

打印机 编码创建一个打印机类Printer,定义抽象方法print(),创建两个子类,即针式打印机类DotMatrixPrinter和喷墨打印机类InkpetPrinter,并在各自类中重写print(),编写测试类实现两种打印机打印。再添加一个激光打印机子类LaserPrinter,重写方法print(),修改测试类实现该打印机打印。 提示:利用向上转型,将子类对象赋给父类Printer的引用变...

weixin_44872278的博客 1958

深入解析SAP MM模块OBYC自动科目分配机制:从T030表到实战配置

本文深入解析SAP MM模块中OBYC自动科目分配机制,阐明其作为连接物流与财务核心桥梁的作用。文章以T030表为核心,详细拆解其字段结构与检索逻辑,并通过采购收货、生产发料等实战场景,手把手演示配置步骤与关键要点,帮助读者掌握从原理到实践的完整知识体系,实现业财无缝对接。

nft7creator的博客 356

头歌Java面向对象 - 封装、继承和多态的综合练习

抽象类用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现,把具体实现留给继承该类的子类。抽象类特点:含有抽象方法的类必须声明为抽象类(不管其中是否有其他方法);抽象类可以没有抽象方法,可以有普通方法;抽象类必须被继承,抽象方法必须被重写(若子类还是抽象类,不需要重写);抽象类不能被实例化(不能直接构造一个该类的对象)。抽象方法特点:

jing13_13的博客 4347

Python对象的基本组成和内存示意图及引用的本质

在Python中,变量也称为:对象的引用(reference)。变量存储的就是对象的地址。变量不需要显式声明类型。根据变量引用的对象,Python解释器自动确定数据类型。一个内存块,拥有特定的值,支持特定类型的相关操作。变量位于:栈内存(压栈出栈等细节,后续再介绍)。⚠️Python是动态类型语言。变量通过地址引用了“对象”。

Calor13的博客 557

微信小程序 - 详细实现打开跳转第三方 H5 网页链接,在微信小程序内直接跳转打开第三方网站链接详细教程(支持跳转公众号文章等,直接复制代码即可)

小程序跳转h5,小程序-Taro小程序中打开h5页面链接,...小程序跳转h5链接(web-view)_微信小程序,小程序如何跳转h5页面,小程序跳转到第三方H5网页,微信小程序跳转第三方H5的方法,小程序-实现怎么跳转打开H5网页链接(或跳转至公众号文章,打开第三方网站,放校验文件,怎么配置业务域名,校验文件验证域名,把校验文件放到对面网站,别人的服务器也打不开没权限怎么放呢,勾选不校验合法域名,txt,打不开别人的网页怎么办,真机调试打不开,无法跳转,有什么其他办法不放校验文件吗,后台配置,怎么

🏆 前端领域优质创作者 3万+

《JavaSE》---15.<面向对象系列之(多态)>

本篇博客主要详解多态的概念、多态的实现条件、多态的体现、方法的重写、重写与重载的区别、静态绑定、动态绑定、。多态的用法、向上转型、向下转型。多态的优点、缺点。避免在构造方法中调用重写的方法。

m0_73456341的博客 1356

【ACP】2025-最新-疑难题解析-1

即用户手动释放时,因实例释放保护开启,不会释放该 ECS 实例(不同云厂商具体实现有差异,但题目场景下选 C )。结合题目中标记,答案为。综上,答案选 B。综上,答案选 C。综上,答案选 D。综上,答案选 A。综上,答案选 A。综上,答案选 C。综上,答案选 D。综上,答案选 A。

jundao1997的专栏 364

Java面向对象篇:封装、继承、多态

1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合 简单理解:类就是对现实事物的一种描述 类的组成 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸) 行为:指事物能执行的操作,例如:手机事物(打电话,发短信) 类和对象的关系 类:类是对现实生活中一类具有共同属性和行为的事物的抽象 对象:是能够看得到摸的着的真实存

terence的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Java】面向对象的三大特征:封装、继承、多态

本章详细解析了Java面向对象编程中的三大特性:封装、继承、多态

yican2580的博客 3412

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

面向对象编程:封装、继承、多态学习

本文主要讲述了面向对象编程的步骤以及概念,封装、继承、重写的意义及作用,面向对象编程的前置知识,以及以后会常用的关键字。

攸攸太上的博客 1111

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java面向对象之多态

内容: 1、多态概述 2、多态代码体现 3、多态调用注意事项 4、多态的好处与弊端 5、向上向下类型转换 6、综合案例 1、多态概述 面向对象三大特性:封装(安全性)、继承(拓展性)、多态(灵活性) 多态是继封装、继承之后,面向对象的第三大特性,广义的多态是指对象的多态,一个对象的多种状态 现实事物经常会体现出多种形态,比如: 一只狗是狗,是动物,是生物...

weixin_34115824的博客 139

Java 面向对象基础篇【三大特性:封装、继承、多态】

面向对象三大特征是面向对象编程的核心,它们使得代码更加模块化、可重用性和可维护性更强 ···

低调,谦虚,自律,反思,成长! 1824

java中多态_java之多态

1.多态的概述:是面向对象的三大特性之一,封装、继承、多态。①一个具体的对象有多种形态,老虎既属于猫科动物(因为子父类是相对的,所以猫科动物也可以看做子类),又属于哺乳动物,所以老虎既可以拥有猫科动物的属性,又有哺乳动物的属性。②Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。普通类与普通类,抽象...

weixin_36457551的博客 3717

【JAVA】Java基础—面向对象编程:多态—多态的概念

多态(Polymorphism)是指同一个操作作用于不同的对象,可以产生不同的结果。编译时多态(静态多态):通过方法重载(Method Overloading)实现。运行时多态(动态多态):通过方法重写(Method Overriding)实现。将多态比喻为一个演员在不同角色中的表现。一个演员(对象)可以在不同的剧本(类)中扮演不同的角色(方法实现)。当观众(程序)看到演员(对象)时,他们并不关心演员的名字(类名),而是关注他们在特定剧本中所扮演的角色(方法实现)。

thinking_chou的专栏 556

【Java学习|黑马笔记|Day10】面向对象进阶|多态、抽象、接口

【Java学习|黑马笔记|Day10】面向对象进阶|多态、抽象、接口 9)多态 同类型的对象表现出的不同形态 多态的表现形式:多态的前提:好处:使用父类作为参数可以接收所有子类对象体现多态的扩展性和便利 10)多态中调用成员的特点 变量调用:编译看左边,运行看右边 方法调用:编译看左边,运行看右边 优势:弊端:不能使用子类的特有功能 引用数据类型的类型转换: 12)包 包:即文件夹,用来管理各种不同功能的java类包名的规则:公司域名反写+包的作用,全部英文小写全类名:包名+类名使用其他类的规

2401_87144364的博客 1081
上一篇: 【Java面向对象】java学习之旅14-Object类
下一篇: 【Java面向对象】java学习之旅16-抽象类
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值