【java基础】上传型和下转型对象

对象可以转型,那么这2个对象一定存在父子关系,或者是实现了接口(也可以把接口当初父类看待)
1、上转型
例如,把猫转换成动物
动物 object =new 猫();
这个动物可以调用 猫继承父类过来的所有方法和成员变量(前提这些方法和变量是可见的,非private,或者无修饰且不同包情况),
如果猫重写了父类的某些方法,那么
动物调用父类的方法一定的子类重写的!!!!!!

2、下转型
动物 object1=new 动物();
猫 object2=(猫)object1;
这样写报错!!!!!!!!!!!!!!

java.lang.ClassCastException: 
com.test.Person cannot be cast to com.test.Student

下转型对象前提,这个对象是你上转型时候的引用变量。
动物 object =new 猫();上转型

猫 object2=(猫)object ;
这个时候就和 猫 object3=new 猫()一样了,
object3能干什么,object2都可以。

demo:

父类----------------------
package com.test;

public class Person {
    int age = 0;
    private int age2 = 0;

    private int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void print() {
        System.out.println("class " + getClass());
    }

}

子类------------------
package com.test;

public class Student extends Person {
    String type = "Student";

    public void print() {
        System.out.println("class " + getClass());
    }

    public void getType() {
        System.out.println("type Student");

    }
}


测试:
package com.test;

public class Test1 {

    public static void main(String[] args) {

        Student s = new Student();
        Person person = s;//上转型
        person.print();//子类class class com.test.Student

        //下转型
        Student s3  =(Student)person;
        s3.print();//子类class class com.test.Student


        /*编译通过,运行报错
         * Exception in thread "main" 子类class class com.test.Student
java.lang.ClassCastException: com.test.Person cannot be cast to com.test.Student
    at com.test.Test1.main(Test1.java:11)
         * 
         */
        Person person2 = new Person();
        Student s2 = (Student) person2;
        s2.getType();
    }

}

好了,就这样

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值