Day09-Object类和多态

2024-03-10 11:48
文章标签 object 多态 day09

本文主要是介绍Day09-Object类和多态,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Day09

  • 总结
    • Object的常用方法
      • hashcode()
      • toString()
      • equals()
    • super关键字
    • 多态
    • final关键字

总结

我是最棒的!基础不牢,地动山摇!

Object的常用方法

hashcode()

//调用hashcode(),返回一个int型的哈希值,对象的地址由哈希值转换为16进制而得String str = "123";int num = str.hashcode();

toString()

//一般要重写toString()方法,打印自己需求的格式@Overridepublic String toString() {String str = "["+this.name + "," + this.age + "]";return str;}

equals()

==用来判断基本数据类型的值是否相等,或者是引用数据类型的地址是否相等

equals的底层还是==,但是我们可以重写equals方法来满足我们的需求

String的equals是JDK自己重写好的,我们在自己写的类中可以直接自动生成重写的equals方法。

//JDK中Object的equals方法
public boolean equals(Object obj) {return (this == obj);}//String重写的equals方法
public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}

super关键字

super指代的是父类对象

作用:可以在子类中访问父类的成员

public class Animal{//字段String name;//构造方法public Animal(){}//普通方法public void test(){System.out.println("test");}}public class Person extends Animal{public Person(){//调用父类的构造方法(非static),写在子类构造方法的第一行,不能和this同时存在super();}public void testSuper(){//调用父类的字段super.name = "子类";System.out.println(super.name);//调用父类的普通(非private,非static方法)super.test();}}

多态

多态就是有继承关系的类,父类变量来保存子类对象,当用父类变量调用方法的时候

如果子类重写了方法,则会调用子类重写的方法(向上造型)

如果需要调用子类中特有的方法,需要用instanceof判断之后,再使用强制类型转换

作用

  1. 可以提高代码的复用和扩展性,及时利用javaGC回收垃圾
  2. 可以屏蔽子类差异性

注意事项

  1. 必须是继承关系
  2. **字段(成员变量)**没有多态
  3. 多态主要体现在调用方法的时候的表现

示例代码如下

public class Animal {int age = 1;public void eat(){System.out.println("吃...");}
}public class Person extends Animal{int age = 2;//重写父类的eat方法@Overridepublic void eat() {System.out.println("人吃肉");}}public class Pig extends Animal{int age = 3;//重写父类的eat方法@Overridepublic void eat() {System.out.println("猪吃菜");}public void gong(){System.out.println("拱白菜");}
}public class PolymorphicTest {public static void main(String[] args) {//向上造型,多态Animal animal = new Person();animal.eat();//向上造型,多态animal = new Pig();animal.eat();//向下造型,判断类型之后,强制类型转换if(animal instanceof Pig){Pig pig = (Pig)animal;pig.gong();}}
}

多态解决类差异性

//人会开车drive(){调用车的run方法}:法兰保、法拉利、保时捷、兰博基尼。 车:run()
//车类是各种车型的父类,每种车型重写父类的run方法public class CarTest {public static void main(String[] args) {//创建一个开车的人Person person = new Person();//创建四种车对象Car faLanBao = new FaLanBao();Car ferrari = new Ferrari();Car porsche = new Porsche();Car lamborghini = new Lamborghini();//调用person的drive方法person.drive(faLanBao);person.drive(ferrari);person.drive(lamborghini);person.drive(porsche);}}

final关键字

final是最终的,一个关键字,也是一个修饰符

可以修饰的

从类层面来看,就是一个最终的类;

final修饰的类不能够有子类(太监类)

用final修饰一个方法,表示这个方法是最终的方法;

特点:① 最终的方法,从方法层面不能够被拓展;

​ ② final修饰的方法不能够被覆写;

变量 (一旦有值不能被更改)

常见用法 : 全局常量 public static final修饰的(常量名全部大写,有多个单词用下划线隔开)

public static final double PI = 3.14;//圆周率

不可以修饰的

构造方法

特点

一旦被第一次赋值后,就不能后续赋值,是不可改变的

使用场景

如果不想让其他人改变已经写好的成员,就可以使用final修饰

一般是public static final连用,比如常量PI(圆周率)

这篇关于Day09-Object类和多态的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/794147

相关文章

深入探讨Java 中的 Object 类详解(一切类的根基)

《深入探讨Java中的Object类详解(一切类的根基)》本文详细介绍了Java中的Object类,作为所有类的根类,其重要性不言而喻,文章涵盖了Object类的主要方法,如toString()... 目录1. Object 类的基本概念1.1 Object 类的定义2. Object 类的主要方法3. O

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

JavaWeb【day09】--(Mybatis)

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

【Day09】

目录 Mybatis-基础操作-环境准备 Mybatis-基础操作-删除 Mybatis-基础操作-删除(预编译SQL) Mybatis-基础操作-新增 Mybatis-基础操作-新增(主键返回) Mybatis-基础操作-更新 Mybatis-基础操作-查询(根据ID查询) Mybatis-基础操作-查询(条件查询) Mybatis-XML映射文件 Mybatis-动态S

【JVM】JVM栈帧中的动态链接 与 Java的面向对象特性--多态

栈帧 每一次方法调用都会有一个对应的栈帧被压入栈(虚拟机栈)中,每一个方法调用结束后,都会有一个栈帧被弹出。 每个栈帧中包括:局部变量表、操作数栈、动态链接、方法返回地址。 JavaGuide:Java内存区域详解(重点) 动态链接 动态链接:指向运行时常量池中该栈帧所属方法的引用。 多态 多态允许不同类的对象对同一消息做出响应,但表现出不同的行为(即方法的多样性)。 多态

error while loading shared libraries: libnuma.so.1: cannot open shared object file:

腾讯云CentOS,安装Mysql时: 1.yum remove libnuma.so.1 2.yum install numactl.x86_64

java基础总结14-面向对象10(多态)

面向对象最核心的机制——动态绑定,也叫多态 1 通过下面的例子理解动态绑定,即多态 package javastudy.summary;class Animal {/*** 声明一个私有的成员变量name。*/private String name;/*** 在Animal类自定义的构造方法* @param name*/Animal(String name) {this.name = n

java基础总结12-面向对象8(Object类)

1 Object类介绍 Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object。所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗

day09-IO-字符流其它流

一、字符流 字符流(只能做文本文件的处理)字符输入流 Reader--FileReader字符输出流 Writer--FileWriter​使用文件字符输入流的好处:读取中文不会出现乱码问题 1.1 字符输入流 构造器说明public FileReader (File file)创建字符输入流管道与源文件接通public FileReader(String pathname)创建字