文章目录
前言
Java 基础-常见面试题(Java Fundamentals - Common Interview Questions)
在学习Java编程的过程中,我整理了一些常见的Java基础面试题。这些题目帮助我回顾了学习过程中的关键知识点。
面向对象的三大特征
1. 封装
在 Java 中,封装主要是通过使用类的成员变量(属性)和成员方法(行为)来实现。。一般来说,我们会设置属性为私有(private),这样外部就无法直接访问和修改我的属性。然后,我们会提供一些公共的方法来获取(getter)和设置(setter)这些属性,即访问器方法。
例如:
public class Student {
// 私有属性
private String name;
private int age;
// 公共的getter方法
public String getName() {
return name;
}
// 公共的setter方法
public void setName(String name) {
this.name = name;
}
// 公共的getter方法
public int getAge() {
return age;
}
// 公共的setter方法
public void setAge(int age) {
if (age >= 0 && age <= 100) {
this.age = age;
} else {
System.out.println("Invalid age");
}
}
}
2. 继承
我们创建一个类(称为子类或派生类),该类继承另一个类(称为父类或基类)的属性和方法。通过继承呢,子类可以重用父类的代码,从而避免重复编写相同的代码。这样可以提高代码的可重用性,促进代码的组织以及管理。
在 Java 中,可以使用extends
关键字来实现继承。子类可以继承父类的所有非私有成员(属性、方法),并且子类也可以添加自己的成员,或重写父类方法。
例如:
// 父类
class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void makeSound() {
System.out.println("The animal makes a sound");
}
public String getName() {
return name;
}
}
// 子类继承自父类
class Dog extends Animal {
public Dog(String name) {
// 调用父类的构造方法
super(name);
}
// 重写父类的方法
@Override
public void makeSound() {
System.out.println("The dog barks");
}
// 子类特有的方法
public void fetchStick() {
System.out.println("The dog fetches a stick");
}
}
// 主类,测试继承
public class InheritanceDemo {
public static void main(String[] args) {
Dog dog = new Dog("Buddy");
dog.makeSound(); // 输出: The dog barks
System.out.println(dog.getName()); // 输出: Buddy
dog.fetchStick(); // 输出: The dog fetches a stick
}
}
3. 多态
指的是同一操作作用于不同的对象,可以产生不同的执行结果。
多态性可以通过两种方式体现:
- 编译时多态性:方法的重载。在同一个类中,可以声明多个同名但参数个数、类型或顺序不同的方法。在编译时期,根据参数的不同来判定采用的方法。
- 运行时多态性:方法的重写和父类引用指向子类对象。派生类可以声明与从基类继承的方法签名一致的方法,即重写方法。在程序运行时,根据运行时对象的类型来调用相应类实现(重写)的方法。
例如:
// 基类
class Shape {
void draw() {
System.out.println("Drawing a generic shape");
}
}
// 子类1
class Circle extends Shape {
@Override
void draw() {
System.out.println("Drawing a circle");
}
}
// 子类2
class Rectangle extends Shape {
@Override
void draw() {
System.out.println("Drawing a rectangle");
}
}
// 主类,测试多态
public class PolymorphismDemo {
public static void main(String[] args) {
// 创建子类对象
Shape circle = new Circle();
Shape rectangle = new Rectangle();
// 调用draw方法,展示多态性
circle.draw(); // 输出: Drawing a circle
rectangle.draw(); // 输出: Drawing a rectangle
// 用数组来存储不同形状的对象,并调用它们的draw方法
Shape[] shapes = new Shape[2];
shapes[0] = new Circle();
shapes[1] = new Rectangle();
for (Shape shape: shapes) {
shape.draw(); // 分输出: Drawing a circle 和 Drawing a rectangle
}
}
}