java笔记10 多态 Object类

深入理解Java中的Object类与多态 本文深入探讨了Java中所有类的超类Object类的特殊地位和作用。Object类是所有类的最终超类,提供了多态操作所需的基本方法。文章解释了为什么所有Java类都继承自Object类,并通过ArrayList的例子展示了多态引用的使用及其限制。同时,也讨论了在使用Object类作为参数和返回类型时需要注意的问题。 阅读详情


1.      多态

1.1  可以理解为事物存在的多种体现形态

1.2  多态的体现

父类引用指向子类对象

例:动物中猫,狗。
    猫这个对象对应的类型是猫类型:猫 x = new 猫();
    同时猫也是动物中的一种,也可以把猫称为动物:动物  y = new 猫();
    动物是猫和狗具体事物中抽取出来的父类型。
    当父类型引用指向了子类对象的时候,就产生了多态。

1.3  多态的前提

必须是类与类有关系,继承或者实现。

通常还有一个前提:子类覆盖父类方法。

1.4  示例

public class H_0802Duotai
{
         public static void main(String[] args)
         {
                            function(new Dog());
                            function(new Cat());
                            function(new Pig());
                            Animal a=new Cat();
                            a.eat();
                            //System.out.println(a.x);
         }       
         public static void function(Animal a)
         {
                   a.eat();
         }
}
abstract class Animal
{
         int x=3;   
         abstract void eat();//抽象方法
}
class Cat extends Animal
{
                   int x=5;
                   public void eat()
                   {
                            System.out.println("吃鱼");//复写
                   }
                   public void catchMouse()
                   {
                            System.out.println("抓老鼠");//特有方法
                   }
}
class Dog extends Animal
{
                   public void eat()
                   {
                            System.out.println("吃骨头");
                   }
                   public void kanJia()
                   {
                            System.out.println("看家");
                   }
}
class Pig extends Animal
{
                   public void eat()
                   {
                            System.out.println("吃饲料");
                   }
                   public void gongDi()
                   {
                            System.out.println("拱地");
                   }
                  
}

结果:

吃骨头

吃鱼

吃饲料

吃鱼

1.5  多态的局限性

只能使用父类的引用访问父类中的成员

1.6  多态的好处

提高了代码的扩展性,前期定义的代码可以使用后期的内容。

 

2.      多态的转型

2.1  Animal a=new Cat();

转型时使用子类方法

属性还是父类属性。

2.2  向上转型。要调用猫的特有方法(catchMouse),强制转型

Cat c=(Cat)a;//a本身必须是猫

可以将父类引用进行转换,不可以将父类对象转换成子类对象

注意:多态自始至终都是子类对象在做变化。

2.3  判断类型是否符合用instanceof关键字

格式:<对象 instanceof类型> ,判断一个对象是否所属于指定的类型。

If(a instanceof Cat){}

 

3.      多态时成员的特点

3.1  成员变量

编译时:参考引用型变量所属的类中的是否有调用的成员变量。有,编译通过,没有,编译失败。

运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。

简单说:编译和运行都参考等号的左边(父类)。

3.2  成员函数

编译时:参考引用型变量所属的类中是否有调用的函数。有,编译通过。没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数。

简单说:编译看左边(父类有没有),运行看右边(子类复写后)。

3.3  静态函数

编译时:参考的是对象所属的类中是否有调用的函数。
 运行时:参考的是对象所属的类中是否有调用的函数。
 简单说:编译和运行看左边。

示例

public class H_0805Duotai
{
         public static void main(String[] args)
         {
                   Fu f=new Zi();
                   f.method1();
                   f.method2();
                  
                   //f.method3();  编译失败,编译时先找f类型中的方法,如果没有,编译失败。
                   //运行时,是看newZi() 对象中的方法,没有的时候调用父类(继承)
                   //方法:编译看左边 运行看右边
                   System.out.println(f.x);//结果是5,看父类
                   // 成员属性:多态过程中,无论编译和运行,都是参考左边。
                  
                   //静态函数不会重写,谁调用谁使用。
                   Zi z=new Zi();
                   z.method1();//zi method 1
                   z.method2();//fu method 2  子类没有,调用父类
                   z.method3();//zi method 3
                  
         }
 
}
 
class Fu
{
         int x=5;
         void method1()
         {
                   System.out.println("fu method 1");
         }
         void method2()
         {
                   System.out.println("fu method 2");
         }
}
class Zi extends Fu
{
         int x=3;
         void method1()
         {
                   System.out.println("zi method 1");
         }
         void method3()
         {
                   System.out.println("zi method 3");
         }
}

结果:

zi method 1

fu method 2

5

zi method 1

fu method 2

zi method 3

 

4.      Object类

Object类:所有类的直接或者间接父类。Java认为所有的对象都具备一些基本的共性内容,这些内容可以不断的向上抽取,最终就抽取到了一个最顶层的类中的,该类中定义的就是所有对象都具备的功能。

 

重要方法:

1、  boolean equals(Object obj):

用于比较两个对象是否相等,其实内部比较的就是两个对象地址。

而根据对象的属性不同,判断对象是否相同的具体内容也不一样。所以在定义类时,一般都会复写equals方法,建立本类特有的判断对象是否相同的依据。


public class ObjectTest
{
    public static void main(String[] args){
        Person p1 = new Person(20);
        Person p2 = new Person(20);
 
        System. out.println(p1.equals(p2));
  }
}
class Person
{
    private int age ;
    Person( int age)
    {
          this.age =age;
    }
    //比较Person的年龄,是否是同龄人
    //一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据。
    public boolean equals(Object obj)
    {
          if(!(objinstanceof Person))
                throw new ClassCastException("类型错误");
          Person p = (Person)obj;
          return this .age == p.age;
   }
}

结果: true

2、  String toString():

将对象变成字符串;默认返回的格式:类名@哈希值 = getClass().getName() + '@' + Integer.toHexString(hashCode())

为了对象对应的字符串内容有意义,可以通过复写,建立该类对象自己特有的字符串表现形式。

public String toString(){

         return "person :"+age;

}

3、Class getClass():获取任意对象运行时的所属字节码文件对象。

4、int hashCode():返回该对象的哈希码值。

 

【RK3588 NPU性能调优实战】多线程异步推理YOLOv5,榨干6TOPS算力 本文详细解析了如何在RK3588 NPU上通过多线程异步推理优化YOLOv5目标检测性能,实现6TOPS算力的最大化利用。通过线程池设计、流水线化帧处理及避开内存带宽瓶颈等技巧,将NPU利用率从30%提升至82%,帧率显著提高至61.2FPS。文章还提供了环境配置、代码实现及性能对比数据,助力开发者高效部署AI模型。 阅读详情

相关推荐

DeepSeek研发的精算大模型「精卫」已实现98%精算任务覆盖,中国人寿采用后年节约3.2亿元技术采购成本,形成关键技术替代效应

根据现有资料,精算领域关键技术替代效应的行业标准定义尚未明确具体提及。然而,可以从相关文献中提取一些关键概念和方法来推导出可能的定义。​替代效应的基本定义​:替代效应是指一种商品价格变动引起另一种商品的相对价格变动,从而导致消费者在维持原有效用水平不变的条件下对商品需求量做出的调整。​技术替代效应​:在精算领域,技术替代效应可以理解为新技术或新方法对现有技术或方法的替代,从而影响精算模型、数据处理和决策过程。例如,机器学习在精算中的应用日益增长,改变了精算师的工作方式和模型构建方法。​。

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

面相对象中级(方法重写,多态,Object类)

定义:equals方法指示其他某个对象是否与此对象相等。[1]"=="的细节(1)==:即可以判断基本类型,又可以判断引用类型。(2)==:如果判断基本类型,判断的是值是否相等。示例:int i = 10;i==d(3)==:如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象//new开辟了一块新的地址空间空间A b = a;A c = b;//true//true// 因为a,b,c指向的同一个地址空间B obj = a;

qq_74930471的博客 740

第4章 本地一键部署(新手首选)

本文介绍了OpenClaw的本地部署方法,特别适合新手用户。部署过程仅需执行一条命令,通过自动脚本完成安装和配置向导。安装完成后,用户可通过终端TUI或Web控制面板验证部署是否成功。文章还提供了常见问题的排查方法,包括端口占用、权限不足、APIKey无效和安装卡顿等情况。整个部署流程简单直观,无需手动修改配置文件,适合快速搭建使用。

eastyuxiao的专栏 194

Java基础(八)——多态、Object类

一、多态 定义:可以理解为事物存在的多种体现形态。 动物:猫,狗。。。 猫 x = new 猫(); 动物 下= new 猫(); 多态的体现 父类的引用指向了自己的子类对象。(创建对象,赋值) 父类的引用也可以接受自己的子类对象。(参数传递,父类类型) 多态的前提 必须是类与类之间有关系。要么继承,要么实现。 通常还有一个前提:对象只能调用父类中的方法(在子类中被重写),存在覆盖(子类...

Dcwjh的博客 529

移动端UI自动化测试新框架Maestro:声明式语法与实战指南

UI自动化测试是保障移动应用质量的关键环节,其核心原理是通过脚本模拟用户操作,对应用界面进行自动验证。传统命令式框架(如基于Selenium WebDriver的Appium)虽然控制粒度细,但脚本编写和维护成本较高。声明式测试框架则通过描述“做什么”而非“怎么做”,显著降低了技术门槛和维护复杂度,其技术价值在于提升测试脚本的可读性、编写效率与跨团队协作能力。在移动端测试领域,这尤其适用于需要快速验证核心业务流程、进行冒烟测试和回归测试的场景。本文聚焦的**Maestro框架**,正是这一理念的杰出实践。它

weixin_32921023的博客 713

【Telephony】Telephony总纲!Phone进程流程(AOSP)

整个Framework层的Telephony框架运行在一个叫做Phone(com.android.phone)的进程中。 Phone进程启动的过程中,会初始化非常多的分支功能,SIM卡流程初始化就是其中之一,所以我觉得有必要写一下Phone进程的框架

weixin_44513784的博客 1979

Java多态、Object的使用

Java基础

saoang的博客 308

第33次CCF-CSP认证考试 第一题 词频统计 满分题解

本人小白一枚,抱着学习的态度想到网上找一些csp的参考答案,但由于实力有限,大佬的代码大都看不太懂,于是萌生了想用一些简单,基础的语句完成csp前两题的想法并公开,以便与像我这样实力不强的同学交流学习,如有更好的建议,还请斧正,感谢!

qq_75242106的博客 1869

java基础之十一->Object、多态(polymorphic)

Object 总结 多态 定义 对于同一指令,不同对象给予不同的反应(不同的方法实现) 规范:(多态实现的前提) 1、必须要有继承关系 2、子类方法必须重写父类的方法 3、父类引用指向子类对象 目的 为了提高代码的扩展性和维护性 方便代码逻辑的编写 实现 父类 Pet package com.msbline.oop.polymorphic; public abstract class Pet { public abstract void feed(); } 子类 Dog packag

qq_22717543的博客 227

数据集分享 | IWR1642呼吸心跳数据集

雷达开源数据库 数据集

【调皮连续波】雷达技术领域知识博主 3205

【WorkBuddy专栏27】WorkBuddy 和 CodeBuddy 到底什么关系——一篇文章终结所有混淆

WorkBuddy 和 CodeBuddy 到底什么关系——一篇文章终结所有混淆

AI人人懂 2720

java 多态与Object

一、Object Object为所有类的父类 当一个对象被声明为Object类型的对象所引用时,它无法再赋值个体原来类型的变量。 我们自己定义的类,很多都没有继承的父类,但实际上,java会帮我们隐秘地继承了Object类 哪怕继承了类,类的父类也会继承Object类,这就说明了,Object是每个类都继承了,都有的,所以他是所有类的父类 Object里面有什么呢? Object{ equals() getClass() hashCode() toString() ... ... } 我

qq_39907659的博客 434

MATLAB算法实战应用案例精讲-【数模应用】梯度提升决策树(GDBT)(附python代码)

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。.........

qq_36130719的博客 2078

【Java 学习】Java的生命之源:走进Object类的神秘花园,解密Object类的背后故事

在Java中,Object类是所有类的根类,每个类都直接或间接地继承自它。Object类提供了一些常用方法,如toString()、equals()、hashCode()等,这些方法为所有类提供了统一的行为和操作接口。此外,clone()方法提供了对象复制的功能,但默认实现仅进行浅拷贝,导致引用类型字段仍指向原始对象。为了实现深拷贝,开发者需要重写clone()方法,手动处理引用类型的复制。本文深入探讨了Object类的设计原理及常用方法,帮助开发者更好地理解Java对象的生命周期及操作。

Code哈哈笑的博客 9645

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

多态和Object类笔记

继承、接口就是多态的具体体现方式方法重载在编译时就已经确定如何调用,因此方法重载属于编译时多态。示例: 3. 运行时多态 运行时多态:Java虚拟机为每个变量中引用的对象调用适当的方法。它不会调用由变量类型定义的方法。这种行为成为虚拟方法的调用。示例: 案例:王者中英雄都有名字,都会攻击,分为物理攻击和法术攻击 应用场景:动物园中有老虎,熊猫,猴子等动物,每种动物吃的东西不一样,老虎吃肉,熊猫吃竹叶,猴子吃水果,动物管理员会给它们喂食物分析:老虎,熊猫,猴子都是动物,它们的动作都是吃,动物管理

sonnet_14_82的博客 623

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java——Object类,多态

Object类,多态Object类 Object类 是所有类的父类,在建立一个新的Java类时默认会继承Object类,其中包含一些重要的方法 常用: getClass()返回对象运行时候的实例类 toString()字符串 equals()比较对象内容相等,通常在子类中会重写【与= =不同, ==表示 1.引用类型指向地址是否相同,2.基本类型的值是否相等】 hashCode()用于哈希查找,经常会与equals()一起重写 注:哈希码(表示同一类对象按照不同的特征得到不同的哈希码,例如对一串

weixin_43804085的博客 418

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java中的所有类都是从Object这个类继承出来的,Object类是所有类的源头,是所有类的父类

Object类 在Java中的所有类都是从Object这个类继承出来的,Object类是所有类的源头,是所有类的父类。 你可以想象自己写的类是这样声明的: public class Dog extends Object {} Object类的部分方法: 1. equals(Object o) //判断是否相等 Dog a = new Dog(); Cat c = new Cat(); boolean b = a.equals(c); //false 2. getClass() Cat c =

weixin_45876795的博客 2014

java Object类

Object类是java默认提供的一个类.java里面除了Object类,所有的类都是存在继承关系.默认会继承Object父类.即所有的类的对象都可以使用Object的引用进行接收.所以在开发之中,Object类是参数的最高统一类型.

Harrybili的博客 941

Java学习笔记——Object类、多态、final

Object类、多态 1. Object 类 2. 多态 3. 向上转型 4. 向下转型 5. final关键字 第一节: Object类 类Object是类层次结构的根类。每个类都使用Object作为超类。 1.1 equals()方法 指示其他某个对象是否与此对象“相等”。 /** * 学生类 * @author wgy * */ public class Student...

冷漠的小猿 852

Java的Object类

getClass():返回对象的实际类型。hashCode():返回对象的哈希码值。equals():判断对象的内容是否相等,需重写。toString():返回对象的字符串表示,需重写。

2302_81006730的博客 1033

java多态性,instanceof及Object类

注意:粉红色为个人理解,其他为原作者的表述 多态是一个之前一直搞不清楚的概念,通过这次笔记,对多态的概念及应用有了较全面的认识,同时学习了instanceof关键字以及Object类的特点. 1. Java中类的多态       所谓类的多态性,是指子类对象和父类对象之间的相互转换. 这里分为两部分做笔记:     1.1 子类对象向父类对象转换(向上转换)

ttwwok的专栏 2856

15_Java筑基之Object类、多态

15_Java筑基之Object类、多态 一. Object类 Object类是类层次结构的根类,每个类都使用Object作为超类(父类). 1. equals()方法 指示其他某个对象是否与此对象“相等”. 示例代码; /** * 学生类 */ public class Student extends Object{ String stuNo; String...

一一哥 651

Java学习 (七) 面向对象--多态、object类

vi Person.java vi Man.java vi Woman.java vi PersonTest.java vi PersonTest.java 返回 4、多态案例展示 vi Main.java 5、多态的弊端 vi Person.java vi PersonTest.java 返回 2、finalize 垃圾回收 vi Person.java vi PersonTest.java

默子昂 919

Java中的Object类

java.lang.Object类是Java语言中的根类,即所有类的父类。如果一个类没有特别指定父类,那么默认则继承自Object类。根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。其中2个方法特别常用:public String toString():返回该对象的字符串表示。public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

qq_46130027的博客 1395

吃透Java基础五:Class类和Object类

在Java的世界里,一切皆是对象,所有的对象都是继承于Object类,而记录对象的类型的信息是由Class类来完成的,下面就让我们来具体了解一下Class类和Object类。 一:Class类 每个类的运行时的类型信息就是用Class对象表示的,它包含了与类有关的信息,其实我们的实例对象就通过Class对象来创建的。Java使用Class对象执行其RTTI(运行时类型识别,Run-Time Typ...

吃透Java 1955

10.Java-面向对象-多态-object类

day12授课笔记 一、作业 练习:课件本章中: /** * * @Description 账户类 * @author shkstart Email:shkstart@126.com * @version * @date 2020年2月29日上午9:36:43 * */ public class Account { private int id;//账号 privat...

qq_40666019的博客 572
上一篇: java笔记09 继承
下一篇: java笔记11 模板设计模式
thoris
博客等级 码龄12年 10粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值