欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2023-12-25 14:53:09
...

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

}

好了,就这样

上一篇:

下一篇: