1.toString
2.equals 继承自object根类,String类重写了 .equals 的方法,所以String比较的是值。
package OO0913rewrite;
import OO0912.Students;
public class Re_equals {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Students s1 = new Students("xiong",20,"man");
Students s2 = new Students("xiong",20,"man");
System.out.println(s1 == s2);//输出false
System.out.println(
s1.equals(s2));//输出false,如果重写了,表示只对对象的某个属性进行比较的话,就另当别论。
String s = new String("ddd");
String s3 = new String("ddd");
System.out.println(
s.equals(s3));//输出true,string重写了equals方法
}
}
然后重写Students的方法
package OO0912;
public class Students {
public String name;
public int age;
public String sex;
public Students (String name,int age , String sex){
this.name = name ;
this.age = age ;
this.sex =sex;
}
@Override//重写了Students的equals方法,然后调用
public boolean equals(Object obj){
Students s = (Students) obj;
return this.age == s.age&&this.name == s.name;
}
}
继承的原理
- 子类创建前,会先产生父类对象。然后在父类对象基础之上,扩展子类特有的属性和方法。所以子类对象中包含完整的父类对象,就可以重用父类中定义的方法和属性。
- 子类对象创建之前,需要通过super()调用父类构造方法,产生父类对象。如果子类构造方法中没有书写super(),这时,虚拟机会自动调用super()。如果父类中没有无参构造方法,子类必须通过super(参数)来显示调用。或者重载无参构造方法。
package OO0913rewrite;
public class A {
public A (){
System.out.println("A构造");
aset();
}
public void aset(){
System.out.println("Ade");//子类在通过父类构造方法的时候,
父类构造如果有一个重载方法,这个方法会被子类调用并显示。
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
}
}
class B extends A{
public B(){
System.out.println("B构造");//父类构造方法不会被重写,所以先继承super的无参构造方法,然后再使用自己的构造方法
}
public void aset(){
System.out.println("Bde");
}
}
- 有参构造方法
public class Product {//先定义父类的属性,然后用this.属性来定义构造方法
public String producter;
public int price;
public Product(String pro, int pri){
this.producter =pro;
this.price =pri;
}
}
final关键字
- 可以修饰类,这个类会变成太监类,只有父类,没有子类;
- 修饰方法,子类就不能重写这个方法;
- 修饰变量,变量地址(就是内容)固定下来,但最终指向的值可以被改变。