美文网首页
向上转型和线下转型

向上转型和线下转型

作者: java4j | 来源:发表于2018-11-13 23:40 被阅读0次

概念

向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口。
向下转型:父类引用的对象转换为子类类型称为向下转型。

向上转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新有的方法都会遗失掉,在编译时,系统会提供找不到方法的错误。向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。

向下转型时,如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。如果父类引用的对象是父类本身或者其它子类,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。

例子

public class Person {
    protected String name = "Person";

    public void printName() {
        System.out.println(name);
    }

    public void print() {
        System.out.println(name);
    }
}

public class Woman extends Person {
    private String name = "Woman";

    @Override
    public void printName() {
        System.out.println(name);
    }

    public void say() {
        System.out.println("Woman say");
    }

    public static void main(String[] args) {
        // 向上转型
        Person p = new Woman();
        // 输出父类的成员变量的值,注意不是子类的
        System.out.println(p.name);

        // 调用子类的方法,输出子类的成员变量
        p.printName();
        // 不能调用子类存在而父类不存在的方法
        // p.say();

        // 调用父类的方法,这个方法也被继承到子类中去了
        // 但是输出的却是父类的成员变量
        p.print();

        // 没有向上转型的话,输出的也是父类成员变量的值
        Woman w = new Woman();
        w.print();
    }
}
输出:
Person
Woman
Person
Person

另外一个例子:

class A {
    public String show(D obj) {
        return ("A and D");
    }

    public String show(A obj) {
        return ("A and A");
    }
}

class B extends A {
    public String show(B obj) {
        return ("B and B");
    }

    @Override
    public String show(A obj) {
        return ("B and A");
    }
}

class C extends B {

}

class D extends B {

}

public class Demo {
    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new B();
        B b = new B();
        C c = new C();
        D d = new D();

        // A and A
        System.out.println("1--" + a1.show(b));
        // A and A
        System.out.println("2--" + a1.show(c));
        // A and D
        System.out.println("3--" + a1.show(d));
        // 这里需要注意,B and A
        System.out.println("4--" + a2.show(b));
        // 这里需要注意,B and A
        System.out.println("5--" + a2.show(c));
        // A and D
        System.out.println("6--" + a2.show(d));
        // B and B
        System.out.println("7--" + b.show(b));
        // 这里选择的是show(B obj)方法,而不是show(A obj)方法
        // B and B
        System.out.println("8--" + b.show(c));
        // 这里需要注意,A and D
        System.out.println("9--" + b.show(d));
    }
}

相关文章

  • 向上转型和线下转型

    概念 向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是...

  • 多态

    Java语言中的向上转型和向下转型, 1向上转型 (upcasting)子———>父 自动类型转换 2 ...

  • java多态(重要O!)

    一、多态的语法 关于java语言中的向上转型和向下转型 1、向上转型(upcasting):子 -->父 2、向下...

  • 12.多态中的向上转型和向下转型

    多态中向上转型与向下转型 多态的转型分为向上转型与向下转型两种: A:向上转型:当有子类对象赋值给一个父类引用时,...

  • JAVA:向上转型和动态绑定机制

    知识梳理 1.向上转型的概念:向上转型又叫自动转型、隐式转型.向上转型就是父类引用指向子类实例,也就是子类的对象可...

  • 向上转型和向下转型

    1. 向上转型:父类的对象名 真正指向了 子类的实体 叫做 向上转型。所以向上转型必须在继承关系中才成立。...

  • 向上转型和向下转型

    向上转型:子类对象转为父类,父类可以是接口。公式:Father f = new Son(); Father是父类或...

  • 12.对象的转型

    1.向上转型 2.向下转型 什么是向上转型? 向上转型------将子类的对象赋值给父类的引用 Student s...

  • java049多态的转型和优缺点及包

    1.多态中的向上转型和向下转型 引用类型之间的转换: 向上转型:由小到大(子类转换成父类) 向...

  • JavaSE之多态

    转型:向上转型(上溯造型)、向下转型(下溯造型) 向上转型:父类引用指向子类对象。 父类的引用 = 子类的对象(也...

网友评论

      本文标题:向上转型和线下转型

      本文链接:https://www.haomeiwen.com/subject/swwrfqtx.html