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

来源:互联网 发布:淘宝小黄鸭 编辑:程序博客网 时间:2024/06/06 04:58

对象可以转型,那么这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.Studentjava.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();    }}

好了,就这样

原创粉丝点击