21xrx.com
2024-12-23 00:02:29 Monday
登录
文章检索 我的文章 写文章
作为一名Java工程师
2023-06-10 13:24:50 深夜i     --     --
抽象类 接口 区别

作为一名Java工程师,我了解到一些Java面试题是常被问到的,但是对于一些新手可能并不了解。在这篇文章中,我将分享Java面试中常见的问题以及他们的答案。

1. 请问Java中抽象类和接口有什么区别?

抽象类和接口都是用于抽象出通用的功能的共性,但是它们有一些重要的区别:

- 抽象类可以有构造函数的实现,接口没有

- 一个类只能继承一个抽象类,但是可以实现多个接口

- 抽象类可以有抽象方法和非抽象方法,必须用abstract关键字声明,但是接口的所有方法都必须是抽象的

- 抽象类可以有实例变量,接口没有

- 抽象类的访问权限可以是public、protected或者默认,而接口只能为public

2. 什么时候会使用private构造函数?

关键词:private构造函数,使用场景

private构造函数是用于防止类被实例化的,一些静态工具类或者单例模式中会用到私有构造方法。

例如:


public class Singleton {

  private static Singleton instance = null;

  private Singleton()

    // 防止使用new实例化

  

  public static Singleton getInstance() {

    if (instance == null) {

      instance = new Singleton();

    }

    return instance;

  }

}

在这个例子中,Singleton类只能被实例化一次,这里通过私有构造函数防止了其他的非法实例化。

3. 解释一下Java中的多态性?

关键词:多态性,解释

多态性是指在程序运行时,相同的代码可能会对应不同的对象,产生不同的结果,通常包括以下几种形式:

- 静态多态:方法重载

- 单态多态:方法的覆盖

- 动态多态:向上/向下转型

例如:


public class Animal {

  public void say() {

    System.out.println("动物在说话...");

  }

}

public class Dog extends Animal {

  @Override

  public void say() {

    System.out.println("狗在汪汪叫...");

  }

}

public class Cat extends Animal {

  @Override

  public void say() {

    System.out.println("猫在喵喵叫...");

  }

}

public class Main {

  public static void main(String[] args) {

    Animal animal = new Animal();

    Animal dog = new Dog();

    Animal cat = new Cat();

    animal.say();

    dog.say();

    cat.say();

  }

}

在这个例子中,我们声明了3个对象,分别是Animal、Dog、Cat。在主函数中我们调用了他们的say方法,这时就出现了多态现象。在运行时,animal的say调用的是Animal类的say方法,dog的say调用的是Dog类的say方法,cat的say调用的是Cat类的say方法。这就是Java中多态性的体现。

Java面试题大全及答案:抽象类与接口的区别、private构造函数的使用场景、Java中的多态性

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复