Java之多态,向上向下转型,重写父类的equals方法
1,多态是什么?
把子类的实例化对象赋值给父类的引用类型
继承 Fu f=new Zi(); Pet p=new Dog(); Pet p=new Penguin();
重写 f.a();
多种状态 多态=继承+重写
2,多态的向上
//向上转型
Object a = new Animal(); //升1级 a创建了两个对象,一个Animal,一个Object,这里只是更倾向于Object
Animal e1 = new Dog(); //升1级 e1创建了三个对象,一个Dog,一个Animal,一个Object,这里只是更倾向于Object
Object e2 = new Dog(); //升2级 同理
//向下转型
//运行时报错,因为没有升直接降级
/*Dog a1 = (Dog) new Animal(); //降1级
Dog a2 = (Dog) new Object(); //降2级
Animal a3 = (Animal) new Object(); //降1级*/
Animal a1= (Animal) a; //a Object类型,降到Animal 降1级
Dog ee1= (Dog) e1; //Animal - Dog类型 降1级
Animal e3= (Animal) e2; //Object - Animal类型 降1级
Dog e4= (Dog) e2; //Object - Dog类型 降2级
//instanceof
System.out.println(a instanceof Object); //true a创建了两个对象,一个Animal,一个Object,所以为true
System.out.println(a instanceof Animal); //true
System.out.println(a instanceof Dog); //false a创建的对象中没有Dog,所以为false
System.out.println("-------------------");
System.out.println(e1 instanceof Object); //true
System.out.println(e1 instanceof Animal); //true
System.out.println(e1 instanceof Dog); //true
System.out.println("-------------------");
System.out.println(e2 instanceof Object); //true
System.out.println(e2 instanceof Animal); //true
System.out.println(e2 instanceof Dog); //true
3,重写父类的equals方法
//重写父类Object的equals方法--只有name和age相同,认为是同一个狗狗
@Override
public boolean equals(Object obj) {
//对象 是否属于 类型
if(obj instanceof Dog){
Dog dog= (Dog)obj;
return this.name==dog.name&&this.age==dog.age;
}else {
System.out.println("不要拿狗狗和其它的东西比");
return false;
}
}