我们都知道 Java 是 以面向对象而著称,最著名的当然就是面向对象的三大特性啦,接下来就逐一举例说明一下。
1. 封装
封装指的是将类的内部细节隐藏起来,只对外提供必要的访问方式。
例如:
我们使用的计算器做一个乘法运算,666 * 1234 = ?
面对这种情况,我们只需要输入到计算器里面,就可以得到一个结果。
那么,计算器是怎么计算出来的结果呢?它也没把计算方法告诉我们啊,藏起来了,这就是一种封装。
如下图这样,把 name 的值藏起来,提供了一个 getName 的方法以供获取其值
在 Java 中通常将类的成员变量声明为私有的(使用 private
关键字修饰),防止其他人直接访问,只能通过它提供的方法进行访问,隐藏一些自己的事,然后给出一个结果。
示例代码:
class Student {
private String name;
public String getName() {
return name;
}
public void setName(String newName) {
name = newName;
}
}
在上述代码中,name
属性被声明为私有,将其对外隐藏起来,只能通过公有的 getter 和 setter 方法来访问和修改。
这样做有什么好处呢?
- 安全性: 防止外部直接访问和修改类的内部数据,只能通过定义的方法进行操作。
- 灵活性: 可以在方法中加入控制逻辑,实现更精确的操作。
- 可维护性: 如果需要修改类的实现细节,只需要修改类的内部代码,而不会影响外部使用类的代码。
2. 继承
继承是为了代码重用的一种方式,一个类可以继承另一个类的属性和方法。
例如:
我们想定义两个类:一个是动物它可以 吃东西,另一个是狗狗它可以 吠叫 。
那么,狗狗是不是动物的一种呢?可以吃东西么?答案当然是可以的,就说明狗狗将会拥有 吃东西和吠叫。
面对这种情况,我们就会使用到了继承的特性,定义一个动物,然后去定义一个狗狗让其继承自动物,把吃东西的技能继承下来。
示例代码:
class Animal {
void eat() {
System.out.println("Animal is eating...");
}
}
class Dog extends Animal {
void bark() {
System.out.println("Dog is barking...");
}
}
在上述代码中,Dog
类使用 extends
关键字继承了 Animal
类的 eat
方法。
3. 多态
多态是允许不同的类实现相同的方法,提高了代码的灵活性和可扩展性。
例如:
我们想画画找到了两个工具,一个是画圆的圆规,另一个是画方块的格尺
这两个工具,都拥有着一个技能是 画画
这两种工具,虽然都拥有着一样的技能名称画画,但是画出来的东西确实不一样的,这就是多态。
示例代码:
interface Shape {
void draw();
}
class Circle implements Shape {
public void draw() {
System.out.println("Drawing a circle");
}
}
class Square implements Shape {
public void draw() {
System.out.println("Drawing a square");
}
}
上述代码中,Circle
和 Square
类都实现了 Shape
接口的 draw
方法,实现了多态。
总结
封装、继承和多态是 Java 面向对象编程的三大特性。封装可以保证类的数据安全性以及代码的可维护性。继承可以减少代码的重复性。多态可以使得程序的代码更加简洁、灵活和易于扩展。更好的掌握这些特性,可以使得 Java 程序变得更加高效、优雅和易于维护。