Java中 对象的上转型对象

我们可以说“美国人是人”,“中国人是人”,这样的说法当然正确,但是,当说“美国人是人”,“中国人是人”时,是在有意强调人的属性和功能,而忽略了美国人speakEnglish()的功能和中国人speakChinese()的功能,从思维方式上看,说“美国人是人”是一种上溯思维方式,这种思维方式就类似于Java中的上转型对象
假设:A类是B类的父类,当用子类创建对象时,并把对象的引用放到父类中的对象时,如:

A a;
a = new B();

//又或

A a;
B b = new B();
a = b;

这时,称对象a 时 对象 b的上转型对象
对象的上转型对象的实体是子类负责创建的,但上转型的对象会失去原对象的一些属性和功能。
1.上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。
2.上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承或重写的方法.上转型对象操作子类继承或重写的方法时,其作用等价于子类对象调用这些方法。因此如果子类重写了父类的某个实例方法,这个上转型对象调用这个实例方法的就是子类重写的方法。

注意(非常重要)
1.不要将父类创建的对象和子类的上转型对象混淆
2.可以将对象的上转型对象强转为一个子类的对象,这时,改子类的对象用具备了子类说有的属性和功能。
3.不可以将父类创建对象的引用赋值给子类声明的对象。(不能说“人是美国人”)
下面是一个小例子

public class Main{
    public static void main(String []args){
        People people = null;
        American Johson = new American();
        people = Johson;//people是Johson的上转型变量
        people.height = 187;
        people.weight = 78.67;
        people.showBodyMess();
        people.mustDoingThing();

        Chinese zhangsan = new Chinese();
        people = zhangsan;
        people.height = 177;
        people.weight = 68.33;
        people.showBodyMess();
        people.mustDoingThing();
        zhangsan = (Chinese)people;
        zhangsan.speakChinese();
    }
}
class People{
    int height;
    double weight;
    public void showBodyMess(){
        System.out.println("**********");
    }
    public void mustDoingThing(){
        System.out.println("吃饭,睡觉,。。。饮水");
    }
}

class American extends People{
    public void showBodyMess(){
        System.out.println("bodyHight:" + height + "cm" + "bodyWeight:" + weight + "kg");
    }
    public void speakEnglish(){
        System.out.println("I am American");
    }
}

class Chinese extends People{
    public void showBodyMess(){
        System.out.printf("身高:%d cm\t 体重:%3.2fkg \n",height,weight);
    }
    public void speakChinese(){
        System.out.println("我是中国人");
    }
}

结果如下:
bodyHight:187cmbodyWeight:78.67kg
吃饭,睡觉,。。。饮水
身高:177 cm 体重:68.33kg
吃饭,睡觉,。。。饮水
我是中国人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值