java上转型对象/多态
上转型:
A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时
例如 A a = new B();
或
A a;
B b=new B();
a=b;
此时,称对象a是对象b的上转型对象
即此时a对象可以调用子类继承的成员变量、继承的方法 和 子类重写的实例方法;不能操作子类新增的成员变量和新增的方法。当然,a也可以调用自己本身父类中的成员变量(非私有)和方法。
多态:
当一个类有很多子类,这些子类都重写父类中的某个实例方法,当我们把子类创建的对象的引用放到父类对象中时,就得到了子类的一个上转型对象,即父类的对象。因为上转型对象可以调用子类继承的重写的方法,因此该上转型对象调用同一实例方法时可以产生不同的行为,因为子类重写的方法的行为可能不一样。多态性就是指父类的某个实例方法被其子类重写时,可以产生各自的不同行为。
要实现多态,首先要有继承或实现的关系,并且要有方法重写
多态的使用场景:父类型可以作为方法形参的数据类型,此时,该形参可以接受其任意的子类对象。(一种上转型)
public class Test {
public static void main(String args[]){
Dog dog=new Dog();
dog.setName("hashiqi");
showAnimal(dog);
Mouse mouse=new Mouse();
mouse.setName("jerry");
showAnimal(mouse);
}
public static void showAnimal(Animal animal){
animal.eat();
}
}
public class Mouse extends Animal{
@Override
public void eat(){
System.out.println(getName()+"吃肉");
}
}
public class Dog extends Animal{
@Override
public void eat(){
System.out.println(getName()+"吃骨头");
}
}
public class Animal {
private String name;
public Animal(){
}
public Animal(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void eat(){
System.out.println("吃饭");
}
}
输出: