object类的基本特性:
object 类是所有Java类的根基类,也就意味着所有的Java对象那个都拥有object类的属性和方法。如果在类的声明中没有使用extends关键字指明欺父类,则默认继承object。
public class Person
{
.
.
.
}
//等价于:
public class Person extends Object
{
.
.
.
}
toString方法:
object类中定义有public String toString()方法,其返回值是String类型。object类中toString方法源码为:
public String toString()
{
return getClass().getName()+"@"+Integer.toHexString(hashCode();}
根据如上源码得知,默认会返回“类名+@+16进制的hashcode”。在打印输出或者用字符串连接对象时会自动调用该对象的toString()方法
==和equals方法:
***==代表比较双方是否相同,若是基本类型则表示值相等,如果是引用类型则表示地址相等即是同一个类。
object类中定义有:public boolean equals(object obj)方法,提供定义“对象内容相等”的逻辑
object的equals方法默认就是比较两个对象的hashcode是同一个对象的引用时返回true苟泽返回false。但是我们可以根据我们自己的要求重写equals方法。
* 测试equals()方法
*/
package cn.wu.oo;
public class TestEquals {
public static void main(String[] args) {
Nation p1 = new Nation(123,"夫差");
Nation p2 = new Nation(123,"勾践");
System.out.println(p1 == p2); //false不是同一个对象
System.out.println(p1.equals(p2));//true ,id相同则认为两个对象内容相同
String s1 = new String("吴越");
String s2 = new String("吴越");
System.err.println(s1 == s2); //false 两个字符串不是死同一个对象
System.err.println(s1.equals(s2));//true 两个字符串内容一样
}
}
class Nation{
int id;
String name;
public Nation(int id,String name){
this.id = id;
this.name = name;
}
public boolean equals(Object obj){
if(obj == null){
return false;
}else {
if(obj instanceof Nation){
Nation c = (Nation)obj;
if(c.id == this.id){
return true;
}
}
}
return false;
}
}
JDK提供一些类,如String,Date包装类,重写了object的equals方法,调用这些类的equals方法。
x.equals(y)当x和y所引用的对现实同一对象切属性内容相同时(并不一定相同对象),返回true否则返回false
super关键字:
可以看做是直接父类对象的引用,可以ton过super来访问父类中被子类覆盖的方法或属性。
使用索尔调用普通方法,语句没有位置限制,可以在子类汇总随便使用。
在同一个类中若是构造方法的第一行代码没有显式的嗲用super或者this();那么java默认都会调用super()含义是调用父类的无参构造函数。这里的super()可以省略
* 测试super关键字
*/
package com.wu.testSuper;
public class TestSuper {
public static void main(String[] args) {
new ChildClass().f();
}
}
class FatherClass{
public int value;
public void f(){
value = 100;
System.out.println("FatherClass.value="+value);
}
}
class ChildClass extends FatherClass{
public int value;
public void f(){
super.f(); //调用父类的普通方法
value = 200;
System.out.println("ChildClass.value ="+value);
System.out.println(value);
System.out.println(super.value); //调用父类的成员变量
}
}
1、一个类定义时,没有使用extends,则它的父类是:object类
2、object中的toString()方法的默认返回字符串是:类名+@+地址
3、==用于比较两个对象是不是相同的,equals在object中默认实现就是如此
4、equals方法一般用于比较两个对象从:逻辑上的值是不是相等的
5、super关键字的含义是:“可以看做”直接父类的引用,可以通过super来访问父类中被子类覆盖的方法或属性
6、类的构造方法中,如果第一行没有写super(…),系统会自动加super(…)