Java 继承与多态

YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV3+CA注意机制+添加小目标检测层(全网独家首发,实现极限涨点) 小目标检测难点众多,导致很多算法对小目标的检测效果远不如大中型目标。影响算法性能的主要原因如下:第一,小目标分辨率低、信息量不足,导致神经网络提取到的有效特征较少。第二,小目标在图像中所占的区域较小,易受背景干扰,这对算法的定位性能要求较高。第三,小物体标注困难,训练数据有限,导致模型泛化能力差。例如多尺度学习、无锚机制和生成对抗学习等方法,都能提高小目标检测的准确性和鲁棒性。为了改善小目标漏检现象严重的问题,我在 YOLOv8 中增加了 P2 检测头,相当于有四个检测头,使网络能检测到更小的目标。 阅读详情

Java 继承与多态

1.父类与子类
子类从它的父类中继承可访问的数据域和方法,还可以添加新数据域和新方法。
父类中的私有数据域在该类之外是不可访问的。因此,不能在子类中直接使用。但是,如果父类中定义了公共的访问器 / 修改器,那么可以通过这些公共的访问器 / 修改器来访问和修改它们。
2.super关键字

语句 super() 调用父类的无参构造方法,而语句 super (arguments) 调用与参数匹配的父类的构造方法。语句 super() 和 super (arguments) 必须出现在类构造方法的第一行,这是显式调用父类构造方法的唯一方式。


构造方法可以调用重载的构造方法或父类的构造方法。如果它们都没有被显式地调用,编译器就会自动地将 super() 作为构造方法的第一条语句。

public class Faculty extends Employee {
public static void main(String[]args){
	new Faculty();
	}
	public Faculty() {
		System.out.println("(4) Performs Faculty's tasks");
		}
}

class Employee extends Person {
	public Employee(){
		this("(2)Invoke Employee's overloaded constructor");
		System.out.println("(3)Performs Employee's tasks ");
}

	public Employee(String s){
		System.out.println(s);
	}
}

 class Person {
 	public Person() {
 		System.out.println("(l)Performs Person's tasks");
	}	
}
/*  输出
(1) Performs Person's tasks
(2) Invoke Employee' s overloaded constructor
(3) Performs Employee's tasks
(4) Performs Faculty's tasks
*/

关键字 super 不仅可以引用父类的构造方法,也可以引用父类的方法。所用语法如下:
super.方法名(参数);
3.方法重写
·仅当实例方法是可访问时,它才能被覆盖。因为私有方法在它的类本身以外是不能访问的,所以它不能被覆盖。如果子类中定义的方法在父类中是私有的,那么这两个方法完全没有关系。
·与实例方法一样,静态方法也能被继承。但是,静态方法不能被覆盖。如果父类中定义的静态方法在子类中被重新定义,那么在父类中定义的静态方法将被隐藏。可以使用语法:父类名 .静态方法名( SuperClassName.staticMethodName) 调用隐藏的静态方法。

方法重写与方法重载不同 要主要区分:
• 方法重写发生在通过继承而相关的不同类中;方法重载可以发生在同一个类中,也
可以发生在由于继承而相关的不同类中。
•方法重写具有同样的签名和返回值类型;方法重载具有同样的名字,但是不同的参
数列表。
4.多态
(1)子类重写父类的方法。使子类具有不同的方法实现。

(2)把父类类型作为参数类型,该父类及其子类对象作为参数转入。

(3)运行时,根据实际创建的对象类型动态决定使用那个方法。

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。


5.动态绑定
所谓动态绑定,通俗的是指,对象在调用方法的时候能够自己判断该调用谁的方法。所以动态绑定一般发生在继承、方法重载时。
那么发生方法重载时,编译器如何确定调用的方法呢,例如,调用c.f(arg)时,首先需要将c声明为B类的对象,此时,如果在B类中,存在多个f方法,只是f的参数类型不同,调用f(int)或者f(String)时。编译器会注意列举B类中所有名为f的方法以及B类超类中的访问权限为public的名为f的方法。如果存在与c.f(arg)中arg类型相匹配的方法,那么就调用这个方法。由此,调用哪个方法隐式参数的实际类型。这个过程就是一个动态绑定的过程。

package chapeter04;
 
class Test
{
	public Test() { }
	
	public void setName(String n)
	{
		this.name=n;
		System.out.println("在父类中");
	}
	
	public String getName()
	{
		return this.name;
	}
	
	private String name;
}
 
public class Sample4_12 extends Test
{
	public void setArea(String a)
	{
		this.area=a;
	}
 
	public String getArea()
	{
		return this.area;
	}
	
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
		Sample4_12 child = new Sample4_12();
		
		Test test []=new Test[2];
		test[0]=child;
		test[0].setName("silence");
		test[1]=new Test();
	}
	
	private String area;
 
}
/*
	运行结果:
	在父类中
*/

上面的例子执行过程如下:
查看test[0]声明类型,即Sample4_12 类,然后获得方法名 setName ,接着把PolymorphicTest 类中的所有名为setName的public方法列举出来。若没有名为setName的方法,则调用失败,否则转换到2。
根据调用方法的参数类型来对上一步列出来的所有方法进行匹配,直到找到一个匹配的转到3,否则匹配失败。
若test[0]所指向(refer to)的对象的类型为其一个子类,则需要查看子类有没有覆盖该方法,若有,则执行子类中的方法。
如果这个方法是private、static、final类型的,就不用进行动态绑定了,因为编译器可以很准确的知道要调用那个方法。且查询匹配方法时,是按照继承树逐级向上查找的,直到找到第一个匹配的方法为止。
但是由于Java中允许类型转换,所以寻找一个合适的方法是个复杂的过程,如果编译器没有找到合适的方法,或者发现类型转换后有多个方法与之匹配,则编译器会报错。
6.incetanceof
instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。

1.类的实例包含本身的实例,以及所有直接或间接子类的实例
2.instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误。


下面是一个完整的样例

package sample;

public class person{
	public String name;
	public int age;
	public person(String a,int b) {
		name = a;
		age = b;
	}
	public void eat() {
		System.out.println(this.name+"吃");
	}
	public void sleep() {
		System.out.println(this.name+"睡");
	}
	public void work() {
		System.out.println(this.name+"工作");
	}
	public void show() {
		this.eat();
		this.sleep();
		this.work();
	}
}
package sample;

public class master extends person{
	public master(String a,int b) {
		super(a,b);
	}
	public void work() {
		System.out.println(this.name+"练功");
	}
}


package sample;

public class student extends person{
	public student(String a,int b) {
		super(a,b);
	}
	public void work() {
		System.out.println(this.name+"学习");
	}
}

package sample;

public class test {
	public static void main(String[] args) {
	      show(new student("田所浩二",24));  // 以 学生 对象调用 show 方法
	      show(new master("马保国",69));  // 以 大师 对象调用 show 方法
	                
	      person a = new student("田所浩二",24);  // 向上转型  
	      a.eat();               // 调用的是 学生 的 eat
	      student c = (student)a;        // 向下转型  
	      c.work();        // 调用的是 学生 的 work
	  }  
	            
	    public static void show(person a)  {
	        // 类型判断
	        if (a instanceof student)  {  // 学生做的事情 
	            student c = (student)a;  
	            c.show();  
	        } else if (a instanceof master) { // 大师做的事情 
	            master c = (master)a;  
	            c.show();  
	        }  
	    }  
	
	 
}

输出结果为:
田所浩二吃
田所浩二睡
田所浩二学习
马保国吃
马保国睡
马保国练功
田所浩二吃
田所浩二学习

【社招算法经验贴】算法社招记录 总的来说,也是收获了七七八八的offer,给的涨幅40~100%,职级有的可以对标到 p7(但阿里p7是真难a,a不动)。面了一圈下来,感觉大模型也在收缩hc。尤其是多模态相关hc。凭着上学期间做过相关视觉的work和paper,社招虽然能进面试,但是hc少得可怜,多模态已死慎入。还有大模型应用算法给的涨幅,跟搜广推的涨幅差别不大。真正能几百万往上的是基座pretrain/后训练/infra,但是全靠social和conn,hc极少。 阅读详情

相关推荐

【计算摄影】相机成像原理:从光到JPEG图像

本文我们将从最基本的相机成像原理开始论述,再讨论光线进入相机后,经过一系列处理成为JPEG图像的大致流程。

qq_35149975的博客 2万+

JAVA基础知识汇总

一、方法的调用 在同一个类下面: 1、非静态方法:非静态方法就是没有 static 修饰的方法,对于非静态方法的调用,是通过对 象来调用的,表现形式如下 对象名.方法() 首先要先new一个对象,然后通过对象去进行调用 2、调用静态方法 静态方法就是用 static 修饰的方法,静态方法的调用是通过类名来调用的, 表现形式如下: 类名.方法() public class CmjUtil { public int add(int a,int b) { System.out.pr

weixin_42352733的博客 696

STM32驱动数码管:从硬件连接到动态显示实现

本文详细介绍了使用STM32单片机驱动数码管的完整流程,从硬件连接到软件实现。内容涵盖共阳/共阴数码管原理、GPIO配置、段码表生成,并重点解析了多位数码管动态显示的核心技术,包括动态扫描原理、消影处理及实战代码,帮助开发者快速掌握这一嵌入式开发基础技能。

p5l2m9n4o6q的博客 575

第二章——Java面向对象(三)——综合练习

我是小康小白,一个平平无奇的Java,Python小白。热爱有趣的文字,生活和远方。 个人博客:https://blog.youkuaiyun.com/weixin_45791445 有问题欢迎QQ联系:1059320343 (记得备注优快云) 个人微信公众号:小康小白 一,通关任务一 题目: 题目代码: package case1; import java.util.Scanner; public class Task1 { public static void main(String[] ar.

小康小白的博客 4883

一文搞懂多速率信号处理中信号插值的本质:从插 0、插原值到线性插值!

信号插值在数字信号处理中经常被使用,但“插值”背后究竟发生了什么,却常被忽略。插0、插原值、线性插值看似只是不同的实现方式,实则对应着完全不同的频域效应与滤波特性。本文将结合公式与MATLAB仿真,深入剖析插0、插原值与线性插值三种典型策略的本质区别。

m0_66360845的博客 918

玩转 InternVL3.5 轻量级实战:从部署到优化的全记录

玩转 InternVL3.5 轻量级实战:从部署到优化的全记录

jacke121的专栏 626

Java网课基础笔记(2)19-07-14

1.extends:继承,子类继承父类非私有的属性 //父类 public class Animal{ public int foot; public int getFoot() { return foot; } public void setFoot(int foot) { this.foot = foot; } public void attck() { S...

fenger_c的博客 510

LLaMA Factory多卡微调的实战教程(持续更新)

本文主要介绍了LLaMA Factory多卡微调的实战教程(持续更新),希望对学习大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 2.3 模型选型与下载 2.4 配置多卡环境 3. 运行代码 3.1 构建训练数据 3.2 修改配置文件 3.3 微调 3.3.1 zero3微调 3.3.2 启动API 3.3.3 模型测试

herosunly的博客 25万+

Java学习过错四

1.包的互相调用 importpackage bag; public class Student { public void introduce() { System.out.println("18"); } }package test; import bag.Student; //其他包的导入 格式: import 包名.类名 p...

深海沧澜的博客 233

QMK固件OLED显示屏配置教程:从零开始实现个性化键盘显示(实操部分)

本教程详细介绍了如何从零开始配置QMK固件的OLED显示屏,实现个性化键盘显示。首先,文章解释了OLED显示屏的基本概念及其在键盘中的应用,并介绍了I2C和SPI两种通信方式。接着,教程逐步指导用户如何在QMK固件中启用OLED功能,包括在rules.mk中启用OLED、在halconf.h和mcuconf.h中配置I2C功能,以及在config.h中设置I2C和OLED参数。最后,教程展示了如何在keymap.c中编写代码,实现OLED显示内容,并提供了进阶定制功能,如显示当前层信息、按键状态和QMK L

Despacito0o的博客 580

Android 13 SPRD 源码默认打开多用户实际无效果问题修复

【代码】Android 13 SPRD 源码默认打开多用户实际无效果问题修复。

m0_60898338的博客 449

【java】Static解读和public static void main(String[] args)详细分析

首先问一个问题: publicstatic void main(String[] args)代码代表了什么含义?以及思考为什么java程序一开始就会进入main()函数,其实c、c++也是如此?后面一个问题有static的基础就非常容易。(后一个问题的答案提前公布:用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块)       现在回到第一个问题:

lzm18064126848的专栏 4万+

25、压电泵致动器变形计算与测量及转弯腔射流特性的有限元分析

本文围绕压电泵致动器的变形计算与测量以及转弯腔射流特性的有限元分析展开研究。通过建立有限元模型和抛物线拟合方法,对压电泵致动器的位移和变形体积进行了详细计算,并探讨了其对传感器性能的影响。同时,利用ANSYS软件对转弯腔在不同角速率输入下的射流特性进行了仿真分析,揭示了流场分布随角速率变化的规律。研究成果为压电流体角速率传感器的设计优化提供了理论依据和技术支持。

ooo22的博客 125

java之继承与多态

带你轻松了解多态与继承

G13138200303的博客 1418

蓝牙模块HM-10手册

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java 继承 多态

父类引用 子类对象不一样的时候,调用重写的方法,所表现出的行为不一样,这种思想————多态(大白话)不同对象的引用,调用同一个方法,产生的结果不一样————多态。

2401_83177222的博客 1335

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java继承和多态

继承和多态 文章目录继承和多态继承多态 继承 多态

weixin_49830664的博客 7377

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java封装 继承 多态_Java 封装、继承、多态

Java 封装、继承、多态1.封装:封装的理解:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,并通过该类提供的方法来实现对隐藏信息的操作和访问。(简单的说就是隐藏对象的信息,留出访问的接口)。特点:1.只能通过规定的方法访问数据;2.隐藏类的实例细节,方便修改和实现。实现封装的方式:使用访问控制符:java提供了三种访问权限,准确的说还有一种是默认的访问权限,加上它一共四种。private...

weixin_39850331的博客 2956

Java基础面试题

1、static 的用法 static是java中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法: 用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享; 用来修饰成员方法,将其变为类方法,可以直接使用**“类名.方法名”**的方式调用,常用于工具类; 静态块用法,将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非常关键; 静态导包用法,将类的方法直接导入到当前类中,从而直接使用**“方法名”**即可调用类方法,更加方便。 2、final 用法 用来修

煮酒客的博客 1790

PTA中java基础判断题及解析

java基础知识常见判断题及解析

qq_50218610的博客 6411

Java入门必做踩坑题(篇二)

本篇主要讲类和对象这一章节的踩坑题,这一章也相对复杂和难理解,面试也是常考的一类题,我分析的都是比较经典的,读者觉得自己学习的不够扎实,可以收藏,如果觉得写发不错的话,求个免费的赞,谢谢!

耀的博客 1564

【Java】随机生成10个100以内的数进行冒泡排序

public static void main(String[] args) { // TODO Auto-generated method stub int []arr= new int [10];//创建数组 Random r = new Random();//生成随机数 for (int i = 0; i < 10; i++) { arr[i]=r.nextInt(100); } System.out.println("排序前"); for (int i = .

qq_59816727的博客 2794

MOOC翁恺java笔记

public class Hello { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Hello World"); //println:跟上回车的输出 } } ctrl+/:注释 Alt+/:代码提示 shift+向下键:选择下一行 “”中为字符串 import java.util.Scanner; public class Hello {

qq_43155998的博客 2364

面向对象基础(继承)

1-1 如果一个类的声明中没有使用extends关键字,这个类被系统默认为是继承Object类。 (T) 1-2 Object是Java中所有类的共同父类。 (T) 1-3 子类不继承父类的构造方法。 (T) 1-4 构造方法可以调用本类中重载的构造方法和它的父类的构造方法。(T) 1-5 覆盖只能在不同的类中完成。 (T) 1-6 构造方法可以被重载 (T) 1-7 构造方法没有返回值,也不能用void来修饰 (T) ...

weixin_50592130的博客 2015

Java 子类构造方法调用父类的构造方法

在构造子类时。子类创建完,即拥有父类的属性,所以在构造子类之前一定会构造父类。 其实子类的所有构造方法的第一行都有一条隐示super()或者显示的super() 隐示super() 先说一下什么情况下会有隐示的super()。 1.子类构造函数中没写super()并且子父类具有无参构造函数。那么子类第一行便会自动一条隐身的语句super 父类代码:具有无参构造函数 public class F...

wsdfym的博客 6289

Java构造方法链和动态绑定

构造方法可以调用重载的构造方法或它父类的构造方法

lavimer 3321

【Java】期末复习——基础知识题

Java选择题填空题

打败编程BOSS的博文 6513
上一篇: 正则表达式
下一篇: Java 抽象类与接口
整天掉线
博客等级 码龄6年 8粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值