向上转型:就是把子类对象赋值给父类类型的变量。接下来用一个简单的例子来进行使用介绍:
创建父类
public class Person {
public String name = "this is a person";
public String sing(Person person){
return "person";
}
public String rap(){
return "rap";
}
}
创建子类
public class Student extends Person{
public String name = "this is a student";
@Override
public String sing(Person person){
return "override";
}
public String sing(Student student){
return "overload";
}
public String jump(){
return "jump";
}
}
测试类
public class Test {
public static void main(String[] args) {
//向上转型
Person p = new Student();
//直接调用父类独有的方法
System.out.println(p.rap());
//调用子类重写的方法
System.out.println(p.sing(p));
//通过向下转型调用子类重载的方法
System.out.println(((Student) p).sing((Student)p));
//通过向下转型调用子类独有的方法
System.out.println(((Student) p).jump());
//直接调用父类变量
System.out.println(p.name);
//通过向下转型调用子类变量
System.out.println(((Student) p).name);
}
}
控制台输出
rap
override
overload
jump
this is a person
this is a student
由以上结果可得:
向上转型创建的变量,直接调用的都是父类的方法和变量,若子类重写了父类的该方法,则会直接调用子类的方法,若想调用子类独有的方法和变量,可以通过向下转型实现调用。
之前查阅网上资料的时候,发现很多文章描述不太准确,把重写和重载(覆盖)都搞混了,有的直接写“同名方法”,重写和重载都是基于同名方法呀……所以这里顺便贴一下重写和重载的详细区别文章,供大家学习参考:https://blog.csdn.net/qq_38685503/article/details/113739437
本文通过实例详细介绍了Java中向上转型的概念,展示了如何通过向上转型调用父类方法和变量,以及如何通过向下转型访问子类特有的方法和变量。同时,澄清了重写和重载的区别,强调重写涉及的是父类被子类覆盖的方法,而重载则是同名但参数不同的方法。
158

被折叠的 条评论
为什么被折叠?



