Excel不相邻列如何打印在一起-英雄云拓展知识分享
129
2023-10-25
【摘要】 本书摘自《JAVA服务端研发知识图谱》一书中第1章,第5节,由何为、迟文恒 编著。
1.5 继承和多态
继承是指派生类继承基类的属性和某些行为,多态是指派生类在基类的基础上进行重写从 而表现出来的不同性状。本节从基础的 Object 和类似的组合讲起, 一点点了解继承和多态的原 理和用法。
1.5.1 Object
前面编写了好多代码用来创建类对象以及调用相应的方法,但是类不仅仅是这些内容。观察下面代码的输出,了解类和对象的其他特性。
public class Person {
public long id;
public String name;
public Person(long id,String name){
this.id =id;
this.name =name;
public static void main(String[] args){
Person person =new Person(1,"xiaoming");
System.out.println(person.toString();
运行结果如下:
comjavadevmap.Person@7852e922
这里使用了 public 的字段,是为了使代码看起来简单一些,实际项目中不这样使用。在这 个例子中,创建了一个 person 对象,然后调用了toString()方法,但是类里并没有这个方法,这 个方法是从哪里来的呢?
这就涉及Java的单根继承结构。在Java中,所有的类都继承自Object类。也就是说除了基 本类型,其他类都是一种 Object。而 toString 方法就是 Object里的方法,通过类的继承而来。这 种单根继承结构也为Java的内存回收提供了很大的便利。
继承听起来很费解,举个例子。例如常用的手机是一种物质,看不见的原子也是一种物 质,那么把这些东西的通用性全部抽离出来,用物质这个统称来代替它们是可以的。对于 Java 语言,这个统称就是 Object, 所有物质包含的属性,例如大小,重量就相当于 Object 里的字段或方 法。而继承就是在这个统称之上再进行细分,从而凸显自己的特性。
再回到代码中, toString 方法其实是把类的内容转化为 String 进行输出,但好像并没有得到 期望输出的内容。是否可以通过某种办法输出期望的数据?代码如下:
@Override
public String toStringO {
retum"id="+this.id+"name="+this.name;
运行结果如下:
id=1 name= xiaoming
可以在 Person 类中重写这个方法,用于替换 Object 的默认 toString 实现,从而达到正确输 出的目的。
Object 还有一个 equals()方法,用于对象的比较。通过下面的代码演示这个方法的使用。首 先不重写此方法,观察输出的结果。
public static void main(String[] args){
Person personl =new Person(1,"xiaoming");
Person person2=new Person(1,"xiaoming");
System.out.println("person 1 =person 2="+(personl=person2));
System.out.println("person 1 equals person 2="+(personl.equals(person2)));
运行结果如下:
person 1 =person 2=false
person 1 equals person 2 = false
虽然代码中给创建的两个对象赋的值是相同的,但是无论用“=”比较还是用 equals 比 较,比较的结果都是不同的。下面重写 equals方法,再执行程序观察输出的结果。
@Override
public boolean equals(Object obj){
if(obj =null){
return false;
Person person=(Person)obj;
if((this.id =person.id)&&(this.name—person.name)){
return true;
}
return false;
运行结果如下:
person 1 =person 2=false
person I equals person 2 =true
通过重写 equals 方法,对对象里的字段值进行比较,字段值相同即两个对象相同,最后两 个对象比较的结果是 true。 那么为什么“=”比较的结果还是 false 呢?其实“=”比较的是对 象的地址,两个对象地址不同所以不同, equals 默认的方法比较的也是对象的地址,需要覆盖 equals的默认实现才能正确进行比较。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~