Java面向对象经典题

简介

面向对象编程是一种常用的编程范式,它将程序分解为一些相互协作的对象。Java是一种广泛使用的面向对象编程语言,它提供了许多特性和语法来支持面向对象编程。

本文将介绍一些经典的Java面向对象编程题,通过这些题目的分析和解答,我们可以更好地理解面向对象编程的概念和原则。

类和对象

在面向对象编程中,最基本的概念是类和对象。类是一种抽象的概念,它定义了一类具有相同属性和行为的对象。对象是类的一个实例,它具有类定义的属性和行为。

在Java中,通过class关键字可以定义一个类。以下是一个简单的示例:

class Circle {
    // 属性
    double radius;

    // 构造方法
    public Circle(double r) {
        radius = r;
    }

    // 方法
    public double area() {
        return Math.PI * radius * radius;
    }
}

// 创建对象
Circle c = new Circle(2.0);
double a = c.area();
System.out.println("圆的面积是:" + a);

上面的代码定义了一个Circle类,它具有一个radius属性和一个计算面积的area方法。通过new关键字可以创建一个Circle对象,然后调用area方法计算圆的面积。

继承和多态

继承是面向对象编程中的另一个重要概念,它允许一个类继承另一个类的属性和方法。通过继承,我们可以构建一个类层次结构,其中子类继承父类的属性和方法,并可以添加自己的属性和方法。

以下是一个继承的示例:

class Shape {
    // 属性
    String color;

    // 构造方法
    public Shape(String c) {
        color = c;
    }

    // 方法
    public void draw() {
        System.out.println("绘制形状");
    }
}

class Circle extends Shape {
    // 属性
    double radius;

    // 构造方法
    public Circle(String c, double r) {
        super(c);
        radius = r;
    }

    // 方法
    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }

    public double area() {
        return Math.PI * radius * radius;
    }
}

// 创建对象
Circle c = new Circle("红色", 2.0);
c.draw();
double a = c.area();
System.out.println("圆的面积是:" + a);

上面的代码定义了一个Shape类和一个Circle类,Circle类继承了Shape类。通过super关键字可以在子类的构造方法中调用父类的构造方法。子类还可以重写父类的方法,实现自己的行为。

多态是继承的一个重要特性,它允许不同类型的对象对同一个方法做出不同的响应。以下是一个多态的示例:

Shape s1 = new Circle("红色", 2.0);
Shape s2 = new Rectangle("蓝色", 3.0, 4.0);

s1.draw();
s2.draw();

上面的代码创建了两个Shape对象,一个是Circle对象,一个是Rectangle对象。虽然它们的具体类型不同,但是它们都是Shape类型的对象,所以可以通过Shape类型的引用来访问它们的方法。

封装和访问控制

封装是面向对象编程中的一个重要原则,它将数据和对数据的操作封装在一个类中,通过定义访问器和修改器来控制对数据的访问。

在Java中,可以使用访问修饰符来控制对类的成员的访问权限。以下是一些常用的访问修饰符:

  • public:公共的,可以在任何地方访问。
  • private:私有的,只能