继承中的构造方法,object类,toString类,equals方法

继承中的构造方法

子类的构造方法必须调用其基类的构造方法。子类可以在自己的构造方法中使用super来调用基类的构造方法,还可以用this来调用本类的其他构造方法。如果要使用super关键字,那么必须出现在构造方法的第一行。如果子类的构造方法中没有显示的调用基类的构造方法,那么系统默认调用无参数的基类构造方法。如果子类的构造方法没有显示调用基类的构造方法,而且基类也没有无参数的构造方法,那么程序就出错了。

class SuperClass{

         privateint n;

         SuperClass(){

                   System.out.println("SuperClass");

         }

         SuperClass(intn){

                   this.n= n;

                   System.out.println("SuperClass:"+n);

         }

}

 

class SubClass extends SuperClass{

         privateint n;

         SubClass(){

                   //super();

                   System.out.println("SubClass");

         }

         SubClass(intn){

                   super(120);

                   this.n= n;

                   System.out.println("SubClass:"+n);

         }

}

 

public class TestSuperSub{

         publicstatic void main(String[] args){

                   SubClasssub1 = new SubClass();

                   SubClasssub2 = new SubClass(110);

         }

}

/*

         结果:

         --------------------------

         SuperClass

         SubClass

         SuperClass:120

         SubClass:110

         --------------------------

*/


 

上面的例子包含了继承中的构造方法,可以看出,super是必不可少的。不然会出错。

总之,集成后的类中,如果要写新的构造方法,一定别忘了父类中的构造方法。

Object类

Object类是Java中所有类的根基类,如果一个类没有用extend指明从哪继承的,就默认是从object类中继承的。

toString方法

先写一个例子:

class Man{

         privateString name;

         privateString wife;

}

public class TestToString{

         publicstatic void main(String[] args){

                   Manm = new Man();

                   System.out.println("Man:"+m);

         }

}

/*

         结果:

         ---------------------

         Man:Man@1fb8ee3

         ---------------------

*/


 

可以看出,如果一个数据类型和String类型的数据联合操作时,会自动调用该类的toString()方法,它的默认返回时这样的:getClass().getName() +'@' + Integer.toHexString(hashCode())

用户可以根据自己的需要自定义toString()方法。

我把程序这样改一下:

class Man{

         private String name;

         private String wife;

         Man(String name,String wife){

                   this.name = name;

                   this.wife = wife;

         }

         public String toString(){

                   return"Name:"+name+" Wife:"+wife;

         }

}

public classTestToString{

         public static void main(String[] args){

                   Man m = newMan("Tom","Jerry");

                   System.out.println("Man:"+m);

         }

}

/*

         -----------------------

         Man:Name:Tom Wife:Jerry

         -----------------------

*/


 

把toString()的方法修改一下,得到的结果就不一样了。

equals方法

equals()方法提供了验证对象是否相等的逻辑。先写一个程序:

public classTestEquals{

         public static void main(String[] args){

                   String s1 = newString("AAAA");

                   String s2 = newString("AAAA ");

                   System.out.println(s1==s2);

                   System.out.println(s1.equals(s2));

         }

}

/*

         结果:

         --------------------

         false

         true

         --------------------

*/

看第一个输出语句:System.out.println(s1==s2);s1和s2是同一个类的对象,而且他们的属性相同,但是在内存中,它们指向不同的块,所以不可能相同。而第二句:System.out.println(s1.equals(s2));s1和s2是同一类的对象,且属性相同,则调用equals()方法时,能返回true。

但是,以上的内容只有针对J2SDK提供的一些类的对象才成立。如果是自定义的类,由它产生的对象,那么就返回两个false了。

equals()方法可以根据用户的需要自己改写。再写一个程序:

class Man{

         private String name;

         private int age;

         private double height;

         private double weight;

         Man(String name,int age,doubleheight,double weight){

                   this.name = name;

                   this.age = age;

                   this.height = height;

                   this.weight = weight;

         }

         

         public boolean equals(Object obj){

                   if(obj == null)  return false;

                   else{

                            if(obj instanceofMan){

                                     Man m =(Man)obj;

                                     if(m.name== this.name && m.age == this.age && m.height == this.height&& m.weight == this.weight){

                                               returntrue;

                                     }

                            }

                   }

                   return false;

         }

}

 

public classTestEquals{

         public static void main(String[] args){

                   Man a = newMan("Tom",18,180.0,180.0);

                   Man b = newMan("Tom",18,180.0,180.0);

                   boolean c = a.equals(b);

                   if(c == true){

                            System.out.println("这是同一个人");

                   }

                   else{

                            System.out.println("这不是同一个人");

                   }

         }

}

/*

         结果:

         ----------------------------

         这是同一个人

         ----------------------------

*/


 

    这里自己定义了equals()方法,比较两个对象是否相同。在main()方法中,验证如果相同,说明两个人是同一个人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值