Java小的细节方面的整理与归纳

面试中对于Java有很多小的细节的考察,这里开一篇文章记录一下,顺便整理复习一下,也为以前的一些迷茫的地方进行一些填坑的操作。


1.向上转型
形如A a=new B()的创建实例方式我们称之为向上转型,A是B的父类(实体类或者抽象类皆可),或者是接口,为什么需要这种定义呢?我们直接使用B b=new B()不就好了?主要原因是因为面向对象思想的承载,当我们通过实例化A(严格意义上来说,这里并不算是实例化了一个A对象,而是相当于A维护一个指针指向了B对象,因此从层面上来说,相当于是实例化一个B对象)可以实现任何继承或者实现了A的子类,当用户需求变化的同时,是我们的代码有很强的适应性,只需要改变一个实例化的对象,如A a=new C(),其他代码无须作任何的改变。

那么问题来了,如果我们A a=new B(),那么关于代码中的输出调用的顺序是什么,可以先看一段代码:

A类
public class A {

    public A(){
        System.out.println("这是A的构造函数");
    }

    public void sys(){
        System.out.println("这是A的输出函数");
    }
}


B类

public class B extends A {
    public B(){
        System.out.println("这是B的构造函数");
    }
    @Override
    public void sys() {
        // TODO Auto-generated method stub
        super.sys();
        System.out.println("这是B的输出函数");
    }
    public void aa(){
        System.out.println("aaaaa");
    }   
}


Main类
public class Main {
    public static void main(String[] args) {
        A a=new B();
        a.sys();
    }
}

这里写图片描述

输出结果如上图所示,这个是非常标准的输出,理论上来讲,一个子类默认调用父类的构造函数然后在调用自己的函数,即图中第一句话和第二句话产生的原因,然而我们在调用sys()方法的时候发现他调用的确是B的sys()方法,这是为什么呢?由于我们new 了一个B()出来,随后向上转型成一个A类,我们可以理解为实际上还是一个B()的类型,所以调用的还是B得sys方法。

以后陆续遇到的再添加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值