「java对象覆盖」java属性覆盖

博主:adminadmin 2022-12-20 22:57:08 71

本篇文章给大家谈谈java对象覆盖,以及java属性覆盖对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA 对象类equals方法的覆盖

第一个Circle 类 你写了一个以Circle 为参数的equals方法,而它本身也有一个来源于Object 的以Object 为参数的equals方法(Java中Object是所有类的父类). 这里就有两个equals方法了:

class Circle {

    double radius;

    public boolean equals(Circle circle) {

        return this.radius == circle.radius; //Circle 

    }

    

    public boolean equals(Object obj) {

        return (this == obj); //Object

    }

}

而你的circle2类型为Object ,这里就会匹配 以Object为参数的方法.这个方法是直接比较两个对象的, 所以值是false

而第二个Circle 类 你写了一个以Object为参数的equals方法 , 与来源于Object 的以Object 为参数的equals方法(Java中Object是所有类的父类)方法名,参数类型完全相同. 这里 你这个equals方法就覆盖了父类Object的equals方法:

class Circle {

    double radius;

    public boolean equals(Object circle) {

        return this.radius == ((Circle)circle).radius;

    }

}

在此,circle1.equals(circle2)调用的就是覆盖了equals的方法即返回的是:his.radius == ((Circle)circle).radius.

因为radius是基本数据类型,所以==比较的是他两的值,两个默认都为0.0 所以为true

java 中list中后面的对象覆盖前面的对象

新建对象,不可能覆盖啊,第二次执行不是0,1了吗,这不就没有覆盖了吗。

出现第一次的情况可能是你把Student类的count属性设置成static了,这样你改变一次count,所有Student实例对象的count值都变成一样的了。

java序列化两个对象写在一个里面会被覆盖吗

Java对象序列化文件追加对象的问题,以及Java的读取多个对象的问题解决方法。

这几天做一个小的聊天项目用到对象序列化的知识,发现对象序列化不能像普通文件一样直接追加对象。每次写入对象都会被覆盖。弄了2个多小时终于解决了。Java默认的对象序列化是每次写入对象都会写入一点头aced 0005(占4个字节),然后每次读取都读完头然后在读内容。解决方法就是先判断文件是否存在。如果不存在,就先创建文件。然后写了第一个对象,也写入了头aced 0005。追加的情况就是当判断文件存在时,把那个4个字节的头aced 0005截取掉,然后在把对象写入到文件。这样就实现了对象序列化的追加。代码如下:

首先我们要写一个对类,用于对象的序列化,这个类实现了Serializable接口。类的定义如下:

package qq.client.tools;

import java.io.*;

/**

* 这是对象序列化的程序

* 实现了对象序列化的追加

* @author Administrator

*

*/

public class ObjectOutputTest {

/**

* @param args

* @throws Exception

*/

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

Message m = new Message();

m.setName("aaaaaaaaaaaaaaaaaaaaa");

File file=new File("D:\jjm.txt");

boolean isexist=false;//定义一个用来判断文件是否需要截掉头aced 0005的

if(file.exists()){ //文件是否存在

isexist=true;

FileOutputStream fo=new FileOutputStream(file,true);

ObjectOutputStream oos = new ObjectOutputStream(fo);

long pos=0;

if(isexist){

pos=fo.getChannel().position()-4;//追加的时候去掉头部aced 0005

fo.getChannel().truncate(pos);

}

oos.writeObject(m);//进行序列化

System.out.println("追加成功");

}else{//文件不存在

file.createNewFile();

FileOutputStream fo=new FileOutputStream(file);

ObjectOutputStream oos = new ObjectOutputStream(fo);

oos.writeObject(m);//进行序列化

oos.close();

System.out.println("首次对象序列化成功!");

}

}

}

下面是反系列化的实现。注意要在循环外面关闭流,在里面关闭会出现句柄无效的错误。

package qq.client.tools;

import java.io.*;

public class ObjectInputTest {

/**这是反序列化的程序

* 实现从文件读取多个对象

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

File file = new File("D:"+File.separator+"jjm.txt");

if(file.exists()){

ObjectInputStream ois;

try {

FileInputStream fn=new FileInputStream(file);

ois = new ObjectInputStream(fn);

while(fn.available()0){//代表文件还有内容

Message p = (Message)ois.readObject();//从流中读取对象

System.out.println(p.getName());

}

ois.close();//注意在循环外面关闭

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

}

整个序列化对象的追加与从文件读取多个对象实就实现了

关于java对象覆盖和java属性覆盖的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-20,除非注明,否则均为首码项目网原创文章,转载请注明出处。