首先简单解释下什么叫对象的上转型对象:
假设A类是B类的父类,当用子类(B类)创建一个对象b时,并把这个对象b的引用放到父类(A类)的对象a中时,这时就称对象a是对象b的上转型对象。
例如现有A类是B类的父类:
A a;
a=new B();
或
A a;
B b=new B();
a=b;
为什么要这么做,因为有时候我们需要用的是A类,但同时需要B类的一些功能。
假设A类是B类的父类,当用子类(B类)创建一个对象b时,并把这个对象b的引用放到父类(A类)的对象a中时,这时就称对象a是对象b的上转型对象。
例如现有A类是B类的父类:
A a;
a=new B();
或
A a;
B b=new B();
a=b;
为什么要这么做,因为有时候我们需要用的是A类,但同时需要B类的一些功能。
详见代码:
Anthropoid.java
public class Anthropoid {
int m=5;
void speak(String s){
System.out.println(s);
}
}
People.java
//继承Anthropoid类
public class People extends Anthropoid {
//m值改变并且新增了一个成员变量n
int m=6;
int n=7;
//重写speak方法
void speak(String s){
System.out.println("******"+s+"******");
}
//新增一个calculate方法
void calculate(int a,int b){
int c=a+b;
System.out.println(a+"+"+b+"="+c);
}
}
Example3_1.java
public class Example3_1 {
public static void main(String[] args) {
Anthropoid monkey;
People people=new People();
monkey=people; //对象的上转型对象,monkey是people的上转型对象
monkey.speak("It is a test"); //上转型对象调用的是子类重写的speak方法
//monkey.n=100; //非法,因为n是子类新增的成员变量
//monkey.calculate(11,22) //非法,因为calculate是子类新增的方法
System.out.println(monkey.m); //操作隐藏的m,不同于people.m
System.out.println(people.m); //操作子类的m
}
}
从中可以看到:
(1)上转型对象不能操作子类新增的成员变量,也不能调用子类新增的方法。
(2)上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承或重写的方法。
代码中有详细的注释,有兴趣的朋友可以自己运行试试,如有问题可随时留言哦。。。