「java对象覆盖」java属性覆盖
本篇文章给大家谈谈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属性覆盖的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-20,除非注明,否则均为
原创文章,转载请注明出处。