Java中向下转型的好处
温馨提醒:具体说明在代码中
一、此为父类
package com.zhuanxing.bean;
//使用向下转型法的好处,此处以代码说明(简单代码,只为说明向下转型的好处)
public class Person {
String name;
//尽量在每个类中都显式设置一个public的构造器
public Person(){
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void showWeight(){
System.out.println("我的体重是60kg");
}
public void showAge(){
System.out.println("我的年龄是18岁");
}
public void job(){
System.out.println("我是一名医生");
}
}
二、此为子类
package com.zhuanxing.bean;
public class Student extends Person {
String id;
float score;
public Student(){
id = "123";
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
@Override
public void job() { //对父类方法的重写
System.out.println("我是一名学生");
}
}
三、此为测试类
package com.zhuanxing.bean;
/*
* 总结:其好处就是不用重新new一个空间,减少了代码量(尤其是在复杂的工程中)
* */
public class Test {
public static void main(String[] args) {
/*
* 如果没有向下转型,则需要new一个Student的对象,
* 才可以调用Student类中的方法和属性(因为Person p = new Student();
* 这种是编译看左边,运行看右边,所以只能通过对象p来调用父类中存在的方法和属性,
* 而无法调用子类中特有的方法和属性,为了解决这个弊端,所以才有了向下转型法)
* 如下
* */
//此处是无向下转型法,但想调用子类特有方法的例子
Student stu = new Student();
System.out.println(stu.id);
System.out.println("***********************************");
/*通过以下四行代码,你可以感受到
*右行代码 Person p = new Student();
* 只能通过对象p来调用父类中存在的方法和属性
*
* */
Person p = new Student();
p.setName("小王");//这里设置的姓名是学生类的姓名,而不是人类的姓名
System.out.println(p.getName());
p.job();
System.out.println("***********************************");
//通过以下代码感受向下转型法的妙处
//不仅可以调用学生类特有的,还可以调用共有的
Student s = (Student) p;
//根据编译看左边,运行看右边,这里左边也是学生类,右边也是学生类,所以
//s.job();调用的是学生类的方法
s.setName("小力");
System.out.println(s.getName());
System.out.println(s.id);
}
}