Java面试题及答案

Java是一种广泛应用于软件开发领域的编程语言,而Java面试题也是面试中常见的考点之一。本文将介绍一些常见的Java面试题及其答案,并附带代码示例。

1. 面向对象的特性有哪些?

Java是一种面向对象的编程语言,它具有以下面向对象的特性:

  • 封装(Encapsulation):将数据和方法封装在一起,通过访问控制符(private, protected, public)来限制对数据和方法的访问。
  • 继承(Inheritance):允许一个类继承另一个类的属性和方法,使得代码可以重用和扩展。
  • 多态(Polymorphism):允许一个对象在不同的上下文中表现出不同的行为,提高代码的灵活性和可扩展性。

下面是一个简单的代码示例,演示了Java中的继承和多态特性:

// 父类
class Animal {
    public void sound() {
        System.out.println("动物发出声音");
    }
}

// 子类
class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("猫发出喵喵的声音");
    }
}

// 子类
class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("狗发出汪汪的声音");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.sound();

        Animal cat = new Cat();
        cat.sound();

        Animal dog = new Dog();
        dog.sound();
    }
}

在上面的代码中,Animal是父类,Cat和Dog是Animal的子类。通过创建不同的对象,可以调用相同的方法sound(),但是实际上会根据对象的类型执行不同的代码块。

2. Java中的接口和抽象类有什么区别?

Java中的接口和抽象类都可以用于实现多态和代码的重用,但它们之间有以下区别:

  • 接口(interface):是一种纯粹的抽象类型,它不能包含实例变量和非抽象方法。接口中的所有方法都是抽象的,它定义了一组方法的规范,而不关心这些方法的具体实现。一个类可以实现多个接口。
  • 抽象类(abstract class):是一种可以包含抽象方法和非抽象方法的类。抽象类不能被实例化,它需要被子类继承并实现其抽象方法。一个类只能继承一个抽象类。

下面是一个简单的代码示例,演示了接口和抽象类的使用:

// 接口
interface Shape {
    double getArea(); // 抽象方法
    double getPerimeter(); // 抽象方法
}

// 抽象类
abstract class AbstractShape {
    protected String color; // 实例变量

    public abstract double getArea(); // 抽象方法

    public void setColor(String color) { // 非抽象方法
        this.color = color;
    }
}

// 实现接口和继承抽象类
class Circle extends AbstractShape implements Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }

    @Override
    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }
}

public class Main {
    public static void main(String[] args) {
        Circle circle = new Circle(5);
        circle.setColor("Red");
        System.out.println("Area: " + circle.getArea());
        System.out.println("Perimeter: " + circle.getPerimeter());
        System.out.println("Color: " + circle.color);
    }
}

在上面的代码中,Shape是一个接口,定义了计算面积和周长的抽象方法。AbstractShape是一个抽象类,其中包含了一个实例变量color和一个抽象方法getArea()。Circle类实现了接口Shape和继承自AbstractShape,它实现了getArea()和getPerimeter()方法