面向对象基础(三大特性)
前言
本文主要介绍面向对象程序设计与面向过程程序设计的区别以及面向对象的三大特性。
一、面向对象与面向过程
面向过程强调的是功能行为,而面向对象强调的是具备功能的对象。例如我们打算前往某个地方,面向过程程序设计就像是自驾前往,需要考虑驾车、路线等因素,而面向对象程序设计则像是打车前往,只需要告诉司机你的目的地就可以了,而不需要考虑以上的种种。相较于面向过程,在完成某件任务时,我们不再像是一个执行者,而更像是一个指挥者
由于面向对象具有封装,继承和多态的特性,因此面向对象的程序设计具有易维护,易扩展,易复用的优点。
二、面向对象的三大特性
1.封装
面向对象编程的核心思想之一就是将数据和对数据的操作封装在一起。经过了封装后的对象隐藏了对象的属性和其实现的细节,而仅对外提供公共的访问方式。
封装的优点是提高了代码的安全性和重用性,便于代码的维护。
Java提供了三种访问权限,包括其默认的访问权限共四种,分别为:
- private 在当前类中可访问
- default 在当前包内和访问
- protected 在当前类和它派生的类中可访问
- public 公众的访问权限,谁都能访问
Java的封装一般是通过private修饰符来声明属性和方法实现的。
示例:
class Student {
private String name; // 使用private封装name属性
public void setName(String name) { // 用于设置name属性
this.name = name;
}
public String getName() { // 用于获取name属性
return this.name;
}
}
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.setName("Lin");
System.out.println(student.getName()); // 输出结果为 Lin
}
}
2.继承
通过继承创建的新类称为“子类”,被继承的类则称为“父类”。子类会继承父类的属性和行为,并且可以扩展新的能力,从而变得更加具体化。
继承的使用可以使得代码更加简洁,同时提高代码的复用性和维护性。
Java使用extends关键字来表示继承关系。
Java 中子类继承父类的语法格式如下:
修饰符 class class_name extends extend_class_name {
// 类的主体
}
其中 class_name 表示子类名称;extend_class_name 表示父类名称。
示例:
class People { // 定义父类:People
public String name="Lin";
public int age=18;
}
class Student extends People { // 子类Student 继承父类 People
void program() {
System.out.println("I love programming!");
}
}
public class test {
public static void main(String args[]) {
Student lin = new Student();
System.out.println("姓名:" + lin.name);
System.out.println("年龄:" + lin.age);
lin.program();
}
}
/*
输出结果为:
姓名:Lin
年龄:18
I love programming!
*/
3.多态
多态是面向对象语言的一个重要特征,指同一个实体同时具有多种形式,即同一个对象,在不同时刻,代表的对象不一样,指的是对象的多种形态。多态的目的是为了接口重用。
多态提高了代码的可扩展性和可维护性。
Java 实现多态有 3 个必要条件:
- 继承
- 重写
- 向上转型
示例:
class animals {
void cry() {
}
}
class dog extends animals {
void cry() {
System.out.println("Woof—");
}
}
class cat extends animals {
void cry() {
System.out.println("Meow~");
}
}
public class test {
public static void main(String args[]) {
animals animal;
animal = new dog();
animal.cry();
animal = new cat();
animal.cry();
}
}
/*
输出结果为:
Woof—
Meow~
*/