1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java向上转型_Java向上转型

java向上转型_Java向上转型

时间:2022-01-08 23:02:45

相关推荐

java向上转型_Java向上转型

向上类型转换:

1.可以通过父类引用变量调用的方法是子类覆盖或继承父类的方法。

2.父类引用变量无法调用子类新增成员变量和新增成员方法。

举个例子

public classAnimal {

public voidsleep() {

System.out.println("Animal sleep");

}

public voidjump(){

System.out.println("Animal jump");

}

}

class Tom extendsAnimal {

@Override

public voidsleep() {

System.out.println("Tom sleep");

}

public voidjump() {

System.out.println("Tom jump");

}

public static voidmain(String[] args) {

Animal animal = new Tom();//向上转型

animal.sleep();

// animal.jump();

// animal.jump(); 找不到这个方法

}

}

class Jerry extendsAnimal{

public voidsleep() {

System.out.println("Jerry sleep");

}

public voidjump() {

System.out.println("Jerry jump");

}

}

可以看到父类引用变量animal指向子类对象,Animal.sleep的结果是:

Tom sleep

而且animal不能调用子类中新增的方法,这是向上转型的不足之处,那么向上转型的作用体现在哪里呢?我们再创建一个类和一个测试类

public classAction{

public voidmotion(Tom tom){

tom.sleep();

}

public voidmotion(Jerry jerry){

jerry.sleep();

}

}

public classTest {

public static voidmain(String[] args) {

Tom tom = newTom();

Jerry jerry = newJerry();

Action action= newAction();

action.motion(tom);

action.mootion(jerry);

}

}

Action类中有多个motion()方法,feed()的参数都是Animal类的子类。如果频繁修改,代码可扩展性、可维护性差。如何优化呢,使用多态,同一个引用类型,使用不同的实例操作不同的对象;

修改Action类:

public class Action {

// public void motion(Tom tom){

// tom.sleep();

// }

//

// public void motion(Jerry jerry){

// jerry.sleep();

// }

public void motion(Animal animal){

animal.sleep();

}

}

修改完Action后结果是一样的,如此一来,无所谓有多少个子类继承Animal都不需要继续添加motion方法了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。