精华内容
下载资源
问答
  • 向上转型和向下转型

    2017-03-15 22:27:26
    .java里面的向上转型和向下转型 Static 为编译时绑定,编译成什么就做什么。 无static时,动态绑定,看情况做。 向上转型时,不能调用父类没有的子类方法

    .java里面的向上转型和向下转型

    Static 为编译时绑定,编译成什么就做什么。

    无static时,动态绑定,看情况做。

    向上转型时,不能调用父类没有的子类方法
    展开全文
  • 主要介绍了 Java 向上转型和向下转型的详解的相关资料,需要的朋友可以参考下
  • Java向上转型和向下转型

    千次阅读 多人点赞 2017-07-20 15:43:38
    Java向上转型和向下转型


    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/75530403冷血之心的博客)



    向上转型:父类引用指向子类对象                             向下转型:子类引用指向父类对象


    举例:Father是父类,Son是子类

    Father f1 = new Son();   // 这就叫 upcasting (向上转型), 现在f1引用指向一个Son对象

    Son s1 = (Son) f1;   // 这就叫 downcasting (向下转型),现在f1还是指向Son对象


    举例:Father是父类,Son是子类

    Father f2 = new Father();

    Son s2 = (Son) f2;       // 编译不出错,运行时出错(除非子类和父类拥有相同的属性和方法),子类引用不能指向父类对象


    向上转型:父类引用指向子类对象,将会丢失子类和父类中不一致的方法,并且父类引用调用的变量只能是父类中的。

    举例:

    class Person{
        private String name = "Person";
        int age=0;
        public void function() {
    		System.out.println("this is person");
    	}
    }
    public class Child extends Person{
    	
        public String grade;
        int age=10;
        public void function() {
    		System.out.println("this is child");
    	}
        public void b1(){
        	System.out.println("子类新方法");
        } //B类定义了自己的新方法
        @Test
        public  void test(){
            Person p = new Child();
            p.function();
            System.out.println(p.age);
        	
        }
    }

    此时将输出:

    “this is child”  

    0

    并且我们是不能使用p.b1()的,编译错误,因为,此时该对象p已经失去了该方法。


    向上转型的作用:

    这里以父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。

    public class Main{  
        
        public static void main(String[] args) {  
            dosleep(new Male());  
            dosleep(new Female());  
        }  
          
        public static void dosleep(Human h) {  
            h.sleep();  
        }  
    }  
    class Human {  
        public void sleep() {  
            System.out.println("Human sleep..");  
        }  
    }  
    class Male extends Human {  
        @Override  
        public void sleep() {  
            System.out.println("Male sleep..");  
        }  
    }  
    class Female extends Human {  
        @Override  
        public void sleep() {  
            System.out.println("Female sleep..");  
        }  
    }  

    如果dosleep以子类对象为参数,则有多少个子类就需要写多少个函数。这也体现了JAVA的抽象编程思想。




    如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~



    本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。



    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,676
精华内容 670
关键字:

向上转型和向下转型