Skip to content

Java 对象转型

标签:Java
创建时间:2022/10/01 16:54:44

理论

  1. 对象间转型分为自动转换和强制转换。
  2. 自动转换:子类对象转父类类型。
  3. 强制转换:父类对象转子类类型。

自动转换

  1. 代码

    java
    package Pack01;
    
    public class Human {
        public static void main(String[] args) {
            Person per = new Programmer();
            per.father();
            per.children();     // 报错
        }
    }
    
    class Person {
        public void father() {
            System.out.println("父类");
        }
    }
    
    class Programmer extends Person {
        public void children() {
            System.out.println("子类");
        }
    }
  2. 报错原因:变量 per 虽然是 Programmer 类的实例,但是它的类型是 Person,在 Person 类中找不到 children 方法,所以会报错。

强制转换

正常程序

java
package Pack01;

public class Human {
    public static void main(String[] args) {
        Person per = new Programmer();

        // 强制转换
        Programmer pro = (Programmer) per;
        pro.children();
        pro.father();
    }
}

class Person {
    public void father() {
        System.out.println("父类");
    }
}

class Programmer extends Person {
    public void children() {
        System.out.println("子类");
    }
}

异常程序

  1. 代码

    java
    package Pack01;
    
    public class Human {
        public static void main(String[] args) {
            Person per = new Programmer();
    
            // 强制转换
            Accounting acc = (Accounting) per;
            acc.children();
            acc.father();
        }
    }
    
    class Person {
        public void father() {
            System.out.println("父类");
        }
    }
    
    class Programmer extends Person {
        public void children() {
            System.out.println("子类");
        }
    }
    
    class Accounting extends Person {
        public void children() {
            System.out.println("子类");
        }
    }
  2. 异常类型:ClassCastException

  3. 异常原因:编译不报错,运行报错。不能将两个同级别类型的对象进行类型转换。

基于 MIT 许可发布