【Java学习笔记】继承和多态

【STM32实战】利用STM32CubeMX配置PWM互补输出驱动电机 本文详细介绍了如何利用STM32CubeMX配置STM32高级定时器的PWM互补输出功能,以驱动电机等需要半桥/全桥电路的应用。通过图形化界面设置定时器参数、使能互补通道并配置关键的死区时间,结合代码示例演示了如何启动PWM输出和动态调整占空比,确保输出安全、精确的互补信号,避免MOS管直通风险,提升驱动可靠性。 阅读详情
-----------------------------------------------个人初学,如有错误,欢迎指正-----------------------------------------------
Java学习笔记之继承和多态
一、简介
        面向对象的三大特征就是封装、继承和多态。本篇博文主要介绍后两者,即继承和多态。内容主要有:
        1、继承的定义以及使用
        2、继承的程序实例
        3、多态的定义以及实现
        4、多态程序实例

二、继承
        2.1什么是继承
        继承是使用已存在的类作为基础来建立新类,可以理解为一个对象从另一个对象获取属性的过程。在Java中,类的继承是单继承,即一个子类只能拥有一个父类。比如,类A继承自类B,我们可以把B类称作A类的父类,A类称为B类的子类,与此同时,类A则不能再有其他父类(单继承)。
       2.2继承是用来做什么的
       从上面的定义可以看出来,继承是使用已存在的类作为基础来建立新类,既然有基础,那当然比从0开始重新建立一个类要高效,所以:
       1、继承可以提高代码的复用性,减少代码冗余
       2、继承是树形结构,这可以很清晰的体现出类的层次关系
       3、继承是实现多态的前提
下面举一个例子:
//定义一个鸟类
public class Bird {

	public static void main(String[] args) {
		Waterfowl w = new Waterfowl();
		w.Fly();//继承父类飞行技能
		w.Sleep();//继承父类睡眠技能
		w.Swimming();//自己独特的技能
	}
	
	//飞行
	public void Fly(){
		System.out.println("鸟类会飞!");
	}

	//觅食
	public void Eat(){
		System.out.println("鸟会觅食!");
	}
	
	//睡觉
	public void Sleep(){
		System.out.println("鸟会睡觉!");
	}
}

//水鸟,继承自鸟类
class Waterfowl extends Bird{
	public void Swimming(){
		System.out.println("水鸟会游泳!");
	}
}
程序输出:
       鸟类会飞!
       鸟会睡觉!
       水鸟会游泳!
虽然水鸟类Waterfowl类实体内并没有定义飞行以及睡觉等方法,但是因为它与父类Bird的继承关系,所以父类的公用方法子类就可以公用,这样子类Waterfowl就不用再写代码去实现飞行和睡觉等功能了,代码的冗余度就会降低。那么,如果子类要重新定义飞行功能呢,那么就用到多态的。

三、多态
        3.1什么是多态
        多态是允许程序不同类的对象,对同一消息做出响应。可以理解为,程序发出指令后,类对象(函数)可以有多种不同的响应方式(返回结果)。
3.2如何实现多态
        1、同一个类中,对方法进行重载
        2、继承父类,对父类的子方法进行重写
下面是小例子:
//同一个类中,对方法Add重载
public class ExampleDemo {

	public static void main(String[] args) {
		Add(1,2);
		Add(1.5,2.5);
		Add(1.5,1);
		Add(2,3.5);
		Add("hello",9573);
		Add(9573,"ABC");
	}
	
	public static void Add(int a,int b){
		System.out.println("整数运算:"+a+"+"+b+" = "+(a+b));
		
	}
	
	public static void Add(double a, double b){
		System.out.println("小数运算:"+a+"+"+b+" = "+(a+b));
	}
	
	public static void Add(double a, int b){
		System.out.println("混合运算:"+a+"+"+b+" = "+(a+b));
	}
	
	public static void Add(int a, double b){
		System.out.println("混合运算:"+a+"+"+b+" = "+(a+b));
	}
	
	public static void Add(String a, int b){
		System.out.println("字符与数字连接:"+a+"+"+b+" = "+a+b);
	}
	
	public  void Add(int a, String b){
		System.out.println("字符与数字连接:"+a+"+"+b+" = "+a+b);
	}
}
运行结果:
       整数运算:1+2 = 3
       小数运算:1.5+2.5 = 4.0
       混合运算:1.5+1 = 2.5
       混合运算:2+3.5 = 5.5
       字符与数字连接:hello+9573 = hello9573
       字符与数字连接:9573+ABC = 9573ABC
可以看到,对方法Add发送相同的消息,即都是进行加法运算,但程序都能给出相应不同结果。
第二个例子:
//子类A继承父类ExampleDemo,重写Add方法
class A extends ExampleDemo{
	
	//当字符与数字混合运算时,将字符串反转后与数字连接再打印
	public static void Add(int a,String b){
		StringBuffer sb = new StringBuffer();
		sb.append(b);
		System.out.println(b+"反转后"+sb.reverse());
		System.out.println(a+"+"+b+" = "+a+sb.toString());
	}
	
	public static void Add(String a, int b){
		StringBuffer sb = new StringBuffer();
		sb.append(a);
		System.out.println(a+"反转后"+sb.reverse());
		System.out.println(a+"+"+b+" = "+sb.toString()+b);
	}
}

//子类B继承父类ExampleDemo,重写Add方法
class B extends ExampleDemo{
	//当字符与数字混合运算时,将数字反转后与字符串连接再打印
	public static void Add(int a,String b){
			StringBuffer sb = new StringBuffer();
			sb.append(a);
			System.out.println(a+"反转后"+sb.reverse());
			System.out.println(a+"+"+b+" = "+sb.toString()+b);
		}
		
		public static void Add(String a, int b){
			StringBuffer sb = new StringBuffer();
			sb.append(b);
			System.out.println(b+"反转后"+sb.reverse());
			System.out.println(a+"+"+b+" = "+a+sb.toString());
		}
}
public static void main(String[] args) {
		ExampleDemo E = new ExampleDemo();
		ExampleDemo eA = new A();
		ExampleDemo eB = new B();
		A a = new A();
		B b = new B();
		
		E.Add("hello",9573);//1
		eA.Add("hello",9573);//2
		eB.Add("hello",9573);//3
		
		a.Add("hello",1234);//4
		a.Add(1.2, 2.8);//5
		
		b.Add("hello",1234);//6
		b.Add(1, 3.5);//7
	}
运行输出:

去掉父类方法Add的Static关键字后:
public class ExampleDemo {

	public static void main(String[] args) {
		
		ExampleDemo E = new ExampleDemo();
		ExampleDemo eA = new A();
		ExampleDemo eB = new B();
		A a = new A();
		B b = new B();
		
		E.Add("hello",9573);//1
		eA.Add("hello",9573);//2
		eB.Add("hello",9573);//3
		
		a.Add("hello",1234);//4
		a.Add(1.2, 2.8);//5
		
		b.Add("hello",1234);//6
		b.Add(1, 3.5);//7
	}
	
	public void Add(int a,int b){
		System.out.println("整数运算:"+a+"+"+b+" = "+(a+b));
		
	}
	
	public void Add(double a, double b){
		System.out.println("小数运算:"+a+"+"+b+" = "+(a+b));
	}
	
	public void Add(double a, int b){
		System.out.println("混合运算:"+a+"+"+b+" = "+(a+b));
	}
	
	public void Add(int a, double b){
		System.out.println("混合运算:"+a+"+"+b+" = "+(a+b));
	}
	
	public void Add(String a, int b){
		System.out.println("字符与数字连接:"+a+"+"+b+" = "+a+b);
	}
	
	public void Add(int a, String b){
		System.out.println("字符与数字连接:"+a+"+"+b+" = "+a+b);
	}
}



//子类A继承父类ExampleDemo,重写Add方法
class A extends ExampleDemo{
	
	//当字符与数字混合运算时,将字符串反转后与数字连接再打印
	public void Add(int a,String b){
		StringBuffer sb = new StringBuffer();
		sb.append(b);
		System.out.println(b+"反转后"+sb.reverse());
		System.out.println(a+"+"+b+" = "+a+sb.toString());
	}
	
	public void Add(String a, int b){
		StringBuffer sb = new StringBuffer();
		sb.append(a);
		System.out.println(a+"反转后"+sb.reverse());
		System.out.println(a+"+"+b+" = "+sb.toString()+b);
	}
}

//子类B继承父类ExampleDemo,重写Add方法
class B extends ExampleDemo{
	//当字符与数字混合运算时,将数字反转后与字符串连接再打印
	public void Add(int a,String b){
			StringBuffer sb = new StringBuffer();
			sb.append(a);
			System.out.println(a+"反转后"+sb.reverse());
			System.out.println(a+"+"+b+" = "+sb.toString()+b);
		}
		
	public void Add(String a, int b){
			StringBuffer sb = new StringBuffer();
			sb.append(b);
			System.out.println(b+"反转后"+sb.reverse());
			System.out.println(a+"+"+b+" = "+a+sb.toString());
		}
}
运行结果:


关于重载和重写的区别:
       1、重载要求方法在参数的个数,顺序,类型上至少有一个不同。重写则必须遵照父类的方法参数,不能做更改。
       2、重载时类内部之间的关系,重写是类与类的关系。重写则必须有继承关系,而且,不能扩大父类方法的范围,比如父类的方法时私有的(Private),子类重写的时候,不能将方法改为公用的(Public)或者保护的(Protected)。如果父类的方法抛出异常,则子类不能比父类抛出更多的异常。简而言之,重写只能缩小范围,不能扩大范围。




spring-ai 1.0.0 学习(四)——提示词管理 摘要:本文介绍Spring AI中提示词管理的最佳实践。首先展示基础样例,指出直接传递用户输入的局限性。随后分析优质提示词应包含系统消息、上下文信息、输出结构和问答样例四要素。文章详述两种实现方式:链式调用(使用ChatClient构建器)和传统对象创建方法。进阶部分涵盖核心接口(Prompt、Message等)、消息类型、模板渲染配置(支持自定义)及提示词工程技巧(如RAG、任务分解)。最后提及高级功能如少样本模板和提示词库。全文强调结构化提示词对提升AI输出质量的关键作用,并展示Spring AI的灵活 阅读详情

相关推荐

同花顺Supermind量化交易 风险控制建模--海龟交易法则

A.市场与标的海龟交易法则应用于流动性高的市场中,选择交易量较大的标的进行交易。本文以沪深300指数ETF为标的,构建海龟交易法则。B、仓位:仓位是海龟交易系统最核心的部分,通过ATR真实波幅指标来管理仓位。第一步:计算True Range,简称TR。TR = Max ( H−L , H−P , P−L ) ,其中H为当日日内最高价,L为当日日内最低价,P为前一日收盘价。第二步:计算ATRATR = mean ( TR , 20 ) , 即计算过去20天的TR的平均值,ATR是TR的移动平均值。

qq_22808537的博客 1497

Java学习笔记——类与对象(封装、继承与多态)

类与对象是在OO变成里面经常出现的字眼,简单的可以理解为类是一类对象的抽象,对象是某一个类的具体实现。面向对象的编程,其实主要就体现在封装、继承与多态这三个方面。下面将逐个的介绍这三个名词。 一、封装         面向对象里面类的提出就是为了实现封装,我们将一类同样的对象的一些相同或相似的属性及方法抽象出来,封装在一起就实现了封装。封装的目的就是为了实现一些数据及方法的内部隐藏(通过修饰符

小江的专栏 2528

Latex下使用JabRef添加参考文献

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 Latex可以手动添加参考文献,但文献过多时,使用JabRef软件相对方便。 提示:以下是本篇文章正文内容,下面案例可供参考 一、JabRef安装 网址:http://www.jabref.org 打开网址后,点击“Download” 进入如下页面后,选择 portable (便携版,无需安装),下载后是一压缩包,打开即可使用。 二、使用 1.创建库 ...

sz3076799的博客 3467

Java学习笔记:继承与多态

Java学习笔记:继承与多态 在这个星期的Java课实验课中,实验内容是继承与多态,当我刚看到题目时,竟然不知道该从何处下手,最近一个月在忙着做安卓,一直也没写博客学习笔记,Java也没怎么认真看,一个暑假的学习竟然忘了不少,实在是捡了芝麻丢了西瓜。在思考了一个多小时之后,并且是在把书中关于继承与多态的部分又看了一遍后,才终于有了思路。好了废话不多说,让我们看一下这道题。 Cola公司的雇员分

Wetsion的博客 3160

比亚迪璇玑架构:10ms级响应引领智能驾驶革命

比亚迪璇玑架构通过三大创新,实现10ms级控制响应时延,使AEB刹车距离比竞品缩短20米。

百态·数智思维 | 聚焦大数据、量化与未来AI 1256

C/C++面试八股文汇总

以对象管理资源,利用的就是C++构造的对象最终会被对象的析构函数销毁的原则。上述的的申请、使用、释放资源的程序较为简单,但是如果程序很复杂的时候,需要为所有的new 分配的内存delete掉,导致极度臃肿,效率下降,更可怕的是,程序的可理解性和可维护性明显降低了,当操作增多时,处理资源释放的代码就会越来越多,越来越乱。栈在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。

wzzrh的博客 1万+

《Java面向对象编程》学习笔记6——继承和多态

本文已搬家至【Java学习笔记】继承和多态

gnuhpc的专栏 1262

Voicebox本地部署:模型下载与离线模式实战指南

在本地语音处理场景中,模型下载失败和离线运行需求是开发者最常遇到的两大难题。理解语音工具的本地推理原理,关键在于掌握模型文件与程序逻辑的分离管理:模型独立下载,程序负责推理,输出留在本机。这种架构带来显著的技术价值——数据不出本地、不依赖公网、批量任务不中断。无论是语音识别转写、语音合成,还是集成到自动化脚本中,本地离线模式都能在隐私敏感或网络不稳定环境下稳定运行。对开发者而言,先解决模型文件的完整获取,再验证离线启动流程,就能绕过“无法下载模型”的常见坑。本文从环境准备、模型放置、服务启动到接口调用,提供

weixin_29048309的博客 307

Java学习笔记2.0 —— 封装、继承和多态

Java学习笔记2.0 —— 封装 继承 多态※

prince0520的博客 396

固定效应模型-以stata为工具

固定效应模型(Fixed Effects Model)是一种面板数据分析方法,通过引入个体固定效应来控制个体间的异质性,并更准确地估计解释变量对因变量的影响。它在许多经济、社会科学和健康研究中被广泛应用。

侯小啾技术博客 2839

ONVIF协议简介与协议测试工具使用详解

Onvif协议及协议测试工具使用详解

dvlinker的技术专栏 3万+

学习笔记,JAVA继承和多态(2)

继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的 方法,此时:将父类引用再还原为子类对象即可,即向下转换。通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到 则访问,否则编译报错。

singreen37的博客 1731

如何在 SAP BTP 上使用 Integration Suite 消费 S/4HANA Cloud API

SAP Integration Suite是一个集成平台即服务(iPaaS),允许开发人员顺利地将内部部署和基于云的应用程序和流程与SAP管理的工具和预构建内容进行集成。登录 SAP Business Technology Platform Cockpit,进入 integration suite:再点击 API management 进入 API Portal:或者直接从收藏夹里打开链接:https://304a49cetrial.integrationsuitetrial-apiportal.cfapp

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1698

Java学习笔记(封装、继承、多态)

就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。换句话说封装就是把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法指一个类实例的相同方法在不同情形有不同表现形式父类类型 变量名=new 子类类型()接口里的数据成员必须初始化,且数据成员均为常量接口里的方法必须全部声明为abstract。

十行代码九行报错的博客 839

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java 继承与多态_【Java学习笔记】继承和多态

1.基本语法:public class Sub extends Base{}当Sub和Base在同一个package时,Sub继承了Base中的public、protected和默认(即未指定访问级别)访问级别的成员变量和方法。当Sub和Base在不同package时,Sub继承了Base中的public、protected访问级别的成员变量和方法。2.Java不支持多重继承,但可以通过串行的间接...

weixin_32503361的博客 236

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java学习笔记封装继承多态

(一)定义(二)实现方式(三)优点(一)定义(二)实现方式(三)优点(一)定义(二)实现条件(三)优点。

weixin_44018966的博客 1142

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java学习笔记——07继承与多态

继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends来声明继承父类即可。

昭与云的博客 1422

【Java学习笔记二】继承和多态

与C++不同的是,在Java中,一个类只能直接继承另一个类,而不允许继承多个类,这个新类称为继承类、派生类或者子类,而被继承的类称为基类或者父类。 继承类能够继承基类的群不属性和行为。 面向对象程序设计的三大特点为:封装、继承和多态。 类的继承能够重复呢利用已有的类,在已有类的基础上进行必要的扩充和修改就可以得到具有新功能和用途的类,从而简化程序设计,提高了软件开发的重用性、可维护性和可靠性。 具...

T_T233333333的博客 295

java继承与多态区别_Java继承与多态学习笔记

1. 继承1.1 super的用法在Java中,任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super()。下面代码定义了人和学生类的继承关系:class Person {String name;int age;public Person(String name, int age) {this.name = name;th...

weixin_42128963的博客 162

JAVA学习笔记之七继承和多态

继承和多态 public class Point2D {    private int x;//定义成私有的在 扩展的类中不能直接调用的    private int y; //定义成私有的在 扩展的类中不能直接调用的 在这里初始值为0     public Point2D() {    }      public Point2D(int x, int y) {

jiayue's BLOG 1330

JAVA学习笔记之-封装,继承,多态 总结

1、封装 封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。是软件设计模块化、软件复用和软件维护的一个基础。 属性的封装:java中类的属性的访问权限的默认值不是private,要想隐藏该属性,需加private(私有)修饰符,来限制只能够在类的内部进行访问。对于类中的私有属性,必须对其给出一对方法(getXxx(),setX

风轻云淡 1139

【Java 学习笔记】《Head First Java》——继承,多态,接口

java 学习笔记——继承,多态,接口继承多态同名异式接口与抽象类抽象类 继承 子类会继承父类所有public类型的实例变量和方法,但不会继承父类所有private类型的变量和方法。 继承下来的方法可以被覆盖掉,但实例变量不能被覆盖掉 可以用IS-A测试来验证继承机构的合理性,IS-A- 关系是单方向的,河马是动物,但动物不一定是河马 当某个方法在子类中被覆盖了,调用这个方法会调用到被覆盖的方法 父类类型的引用 可以调用父类中定义的所有属性和方法,对于子类中定义的而父类中没有的,父类类型的引用不能调用!

ftfy123的博客 674

java学习笔记(三)继承多态

成员变变量访问,就近原则:(覆盖虚方法表)3举例:dog继承animalanimal有一个方法 public animal method()dog重写的方法可以是 public animal method()也可以是 public dog method()

qq_63317320的博客 327

Java学习笔记2从继承到多态

继承 extends(延展、拓展) 定义当前的类时,可以 public class Student extends Person{…} 此处的Person为已定义过的类,如果Students类里面有一些属性和方法和Person一样,则可以用这个东西继承那些属性和方法,不用再在Student方法里写了 格式:class A extends B{} A:subclass,子类(派生类) B:superclass,父类(超类,基类) private的也继承了,不过不可以直接调,也要用setter/getter 注

qq_51955445的博客 153

java继承,多态及相关学习笔记

较为详细的介绍了继承,多态,方法重定义和抽象类的规则和使用场景,加深对面向对象编程的理解。后面还附带了一个综合练习的实现——卡尔大战剑圣。

FullStackSoldier的博客 387

java多态和继承_Java学习笔记--继承和多态(上)

1.通过继承来开发超类(superclass)2.使用super 关键词唤起超类的构造方法3.在超类中覆盖方法4.区分override和overload5.在Object类中探索toString()类6.发现多态性和动态绑定7.描述解释为什么向下转型是必须的8.在Object类中探索equals 方法9.存储,取回,实现ArrayLis的对象10.使用ArrayList类实现Stack11.超类中...

weixin_36255893的博客 215
上一篇: 【Java学习笔记】接口和抽象类
下一篇: 【Java学习笔记】内部类
VisionDo
博客等级 码龄11年 8粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值