Java 高频面试题——多态性

简介: 就是一种事务的多种形态。什么是多态性?就是在创建对象的时候,左边声明的是一个变量,右边new的却是子类的对象,这就是多态性。也即:父类的引用指向子类的对象。假设Man是Person的子类:Person p = new Man()多态性的使用:有了对象的多态性以后,调用的是父类中声明的方法,执行的却是子类中重写父类的方法。

Java 高频面试题——多态性


谈谈你对多态性的理解


  • 就是一种事务的多种形态。
  • 什么是多态性?就是在创建对象的时候,左边声明的是一个变量,右边new的却是子类的对象,这就是多态性。也即:父类的引用指向子类的对象。假设Man是Person的子类:Person p = new Man()
  • 多态性的使用:有了对象的多态性以后,调用的是父类中声明的方法,执行的却是子类中重写父类的方法。
  • 多态性使用的前提:继承性和方法的重写。
  • 多态性使用的好处:使得代码具有了通用性。


多态是编译时行为还是运行时行为?


  • 运行时行为


  • 代码验证:
import java.util.Random; //创建一个新的随机数生成器。
//证明如下:
class Animal {
  protected void eat() {
    System.out.println("动物吃食物");
    }
 }
class Cat extends Animal {
  protected void eat() {
    System.out.println("猫吃鱼");
    }
}   
class Dog extends Animal {
  protected void eat() {
    System.out.println("狗吃骨头");
    }
}
class Sheep extends Animal {
  protected void eat() {
    System.out.println("羊吃草");
    }
}
public class Test {
  public static Animal getInstance(int key){   //该方法返回的是一个Animal类的实例化的对象
    switch(key){
      case 0 :
        return new Dog();
      case 1 :
        return new Cat();
      default :
        return new Sheep();
      }
}
public static void main(String[] args) {
  int key = new Random().nextInt(3)  //返回int随机数,每个值在[0,3)之间。
  System.out.println(key);
  Animal animal = getInstance(key);//调用getInstance()方法返回一个Animal类的对象
  animal.eat();
}


编译时的多态性与运行时的多态性有什么区别,他们的实现方法有什么不同?


  • 多态从实现的角度可以划为两类:编译时多态和运行时多态。


  • 编译时的多态性:就是在程序编译的时候,也就是生成解决方案的时候就决定要实现什么操作。


  • 运行时的多态性:就是指直到系统运行时,才根据实际情况决定实现何种操作。
  • 多态实现形式不同:编译时的多态是通过静态连编来实现的;运行时的多态是用动态连编来实现的。
  • 多态性通过方式不同:编译时的多态性主要是通过函数重载和运算符重载来实现的;运行时的多态性主要是通过虚函数来实现的。


扩展资料:


  • 静态多态性又称编译时的多态性。静态多态性的函数调用速度快、效率高但缺乏灵活性,在程序运行前就应决定执行的函数和方法。


  • 动态多态性的特点是:不在编译时确定调用的是哪个函数,而是在程序运行过程中才动态地确定操作所针对的对象。又称运行时的多态性。动态多态性是通过虚函数(virtual function)实现的。
相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
100 2
|
2天前
|
监控 Dubbo Java
Java Dubbo 面试题
Java Dubbo相关基础面试题
|
2天前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
|
2天前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题
|
2天前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
17 4
|
2天前
|
SQL 监控 druid
Java Druid 面试题
Java Druid 连接池相关基础面试题
|
2天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题
|
23天前
|
Java
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
今日分享的主题是如何区分&和&&的区别,提高自身面试的能力。主要分为以下四部分。 1、自我面试经历 2、&amp和&amp&amp的不同之处 3、&对&&的不同用回答逻辑解释 4、彩蛋
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
90 14
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!