Java的Object几个重写的方法

1:toString();

只是简单的列出对象的状态(也就是重要的实例变量的当前值)。

package jicheng;
public
class Animal { public static void main(String[] args) { Animal a=new Animal(); System.out.println(a); } }

输出结果:

重写

 

package jicheng;

public class Animal {
    private String name;
    private  int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Animal(){}
    public Animal(String name,int age){
        this.name=name;
        this.age=age;
        System.out.println("name="+name+","+"age="+age);
    }
    @Override
    public String toString() {
        return "Animal [name=" + name + ", age=" + age + "]";
    }
}
package jicheng;

public class Animatetable {
    public static void main(String[] args) {
        Animal a =new Animal("lu",13);
        
        System.out.println(a);
    }
    
}

小知识:this 关键字

  1):表示当前的类的成员变量,也叫 类的属性

package jicheng;

public class A{ 
    private String name;//定义一个成员变量name

    public String getName() {//获得姓名
        return name;
    }

    public void setName(String name) {//设置姓名,定义一个形参name
        name = name;//将局部变量的值传递给成员变量
    }
    public static void main(String[] args) {
        A a=new A();
        a.setName("lu");
        System.out.println(a.getName());
    }
}

由运行结果可以看出,通过name=name并没有正确的将内容赋给属性,为什么呢?因为此时操作的name实际上是方法中的,跟类中的属性完全不沾边。

另外,这个程序代码中,有一个成员变量name,同时在方法中有个形式参数,参数名也是name。然后在方法中将形式参数name的值传递给成员变量name。虽然我们可以看明白这个代码的含义,但是作
为Java编译器它是怎么判断使用哪个变量的呢?到底是将形式参数name的值传递给成员变量name,还是反过来讲成员变量name的值传递给形式参数name呢?

此时this这个关键字就起到作用了,这种情
况下使用this这个关键字代表的就是类中的成员变量,又叫做类的属性。所以此时,为了明确的表示出哪一个是类中的属性,就要加上“this.属性名称”的操作。

 2):引用构造函数。

package jicheng;

public class A{
    public static String name;//定义一个成员变量name
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public A(){  //定义一个无参的构造函数
        this(name);//调用有参的构造函数
        System.out.println("testA");
        
    }
    public A(String name){//定义一个有参的构造函数
        System.out.println("TestA");
    }
}

public class Test {
    public static void main(String[] args) {
        A  a=new A();
    }
}

输出

创建了一个A对象。 然后a引用A()对象。调用 public A()构造函数。但是无参构造函数中有this("TestB");表示调用有参的构造函数。所以也打印出来了。

3):this表示当前对象。

package jicheng;

public class A{ 
    public String getInfo(){
        System.out.println("Student类--->"+this);
        return null;
    }
    public static void main(String[] args) {
        A a=new A();
        a.getInfo();
        System.out.println(a.toString());
        System.out.println(a);
        }
}

 

 return this  返回当前对象。

public A getInfo(){
        System.out.println("Student类--->"+this);
        return this;
    }

 二):equals()

  比较两个引用是否完全相同时。用==来比较。 要知道对象本身是否相同时。用equals()方法。

  假如两辆车A和B。都是同一批生产的。==来比较的话是两个引用都指向这辆车。

posted @ 2017-08-23 18:36  陆伟  阅读(1291)  评论(0编辑  收藏  举报