Java学习资料
Java学习资料
Java学习资料
在 Java 编程领域,面向对象编程(OOP)思想是构建复杂且高效程序的基石。它将现实世界中的事物抽象为程序中的对象,通过一系列特性,让程序更具模块化、可维护性与扩展性。
一、面向对象编程思想
(一)OOP 概念
面向对象编程是一种编程范式,它将数据(属性)和对数据的操作(方法)封装在一起,形成一个个独立的对象。这些对象通过相互协作来完成各种任务。与传统的面向过程编程不同,面向对象编程更关注 “谁来做”,而不是 “怎么做”。例如,在一个游戏开发中,角色、道具、场景等都可以看作是独立的对象,每个对象都有自己的属性和行为,通过对象之间的交互来实现游戏的各种功能。
(二)OOP 特点
封装:封装是将对象的属性和方法隐藏起来,只对外提供公共的访问接口。通过封装,可以保护对象的内部状态不被随意修改,提高代码的安全性和可维护性。例如,一个银行账户类,将账户余额、密码等属性封装起来,通过存款、取款等方法来操作这些属性,外部代码不能直接访问和修改账户余额,只能通过规定的方法进行操作。
继承:继承允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以复用父类的代码,同时还可以添加自己特有的属性和方法。例如,汽车类可以作为父类,包含一些通用的属性和方法,如颜色、品牌、行驶等,而轿车类和 SUV 类可以作为汽车类的子类,继承汽车类的属性和方法,并根据自身特点添加一些独特的属性和方法,如轿车的座椅舒适度、SUV 的越野性能等。
多态:多态是指同一个方法在不同的对象上调用会产生不同的行为。它通过方法重写和对象的多态性来实现。例如,动物类有一个叫 “叫” 的方法,猫类和狗类继承自动物类,并分别重写了 “叫” 的方法,当调用猫对象和狗对象的 “叫” 方法时,会产生不同的叫声,这就是多态的体现。多态使得代码更加灵活和可扩展,提高了代码的复用性。
二、类与对象
(一)类的定义
类是对象的模板,它定义了对象的属性和方法。在 Java 中,类的定义语法如下:
public class ClassName {
// 成员变量(属性)
private int variable1;
private String variable2;
// 构造方法
public ClassName(int var1, String var2) {
this.variable1 = var1;
this.variable2 = var2;
}
// 成员方法
public void method1() {
// 方法体
}
public String method2() {
// 方法体
return "";
}
}
在这个例子中,ClassName是类名,variable1和variable2是成员变量,用于描述对象的属性;构造方法用于创建对象时初始化成员变量;method1和method2是成员方法,用于定义对象的行为。
(二)对象的创建与使用
通过类可以创建对象,对象也被称为类的实例。创建对象的语法如下:
ClassName objectName = new ClassName(10, "example");
这里objectName是对象名,new关键字用于创建对象,后面跟着类的构造方法,传入相应的参数来初始化对象的属性。创建对象后,就可以通过对象名来访问对象的属性和方法:
objectName.method1();
String result = objectName.method2();
(三)构造函数与方法重载
构造函数是一种特殊的方法,它与类名相同,没有返回值。构造函数主要用于在创建对象时初始化对象的属性。一个类可以有多个构造函数,它们的参数列表不同,这种现象称为构造函数重载。例如:
public class Person {
private String name;
private int age;
// 无参构造函数
public Person() {
name = "Unknown";
age = 0;
}
// 有参构造函数
public Person(String n, int a) {
name = n;
age = a;
}
}
方法重载不仅适用于构造函数,普通方法也可以重载。方法重载要求方法名相同,但参数列表不同(参数个数、类型或顺序不同)。例如:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
在这个Calculator类中,add方法被重载,根据传入参数的类型不同,执行不同的加法操作。
三、封装的深入理解
(一)访问修饰符
Java 中通过访问修饰符来实现封装。常用的访问修饰符有private、public、protected和默认(不写修饰符)。
private:被private修饰的成员变量和方法只能在本类中访问,外部类无法访问。这是实现封装的重要手段,用于隐藏类的内部细节。
public:被public修饰的成员变量和方法可以被任何类访问,通常用于对外提供公共的接口。
protected:被protected修饰的成员变量和方法可以被本类、同包中的其他类以及不同包中的子类访问。
默认:如果不写访问修饰符,成员变量和方法具有包访问权限,即只能被同包中的其他类访问。
(二)封装的好处
数据安全性:通过将属性设置为private,并提供公共的访问方法,可以防止外部代码随意修改对象的内部状态,保证数据的完整性和一致性。
代码维护性:封装使得类的内部实现细节对外部隐藏,当类的内部实现发生变化时,只要对外接口不变,就不会影响到其他使用该类的代码,降低了代码的耦合度,提高了代码的可维护性。
四、继承的详细应用
(一)继承的语法
在 Java 中,使用extends关键字来实现继承。例如:
public class Student extends Person {
private String studentId;
public Student(String n, int a, String id) {
super(n, a);
studentId = id;
}
public void study() {
System.out.println(name + "正在学习");
}
}
这里Student类继承自Person类,Student类自动拥有Person类的非私有属性和方法。在Student类的构造函数中,使用super关键字调用父类的构造函数,用于初始化从父类继承的属性。
(二)方法重写与 super 关键字
当子类需要对从父类继承的方法进行重新定义时,就需要使用方法重写。方法重写要求方法名、参数列表和返回类型(返回类型可以是父类返回类型的子类型)都与父类中的方法相同。例如:
public class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
在这个例子中,Dog类重写了Animal类的makeSound方法。@Override注解用于标识方法重写,它可以帮助开发者检查方法重写是否正确。
super关键字除了在构造函数中用于调用父类的构造函数外,还可以在方法中用于调用父类被重写的方法。例如:
public class Dog extends Animal {
@Override
public void makeSound() {
super.makeSound();
System.out.println("汪汪汪");
}
}
在Dog类的makeSound方法中,先调用父类的makeSound方法,然后再输出自己特有的叫声。
五、多态的实现与应用
(一)多态的实现方式
方法重写:如前面提到的Animal和Dog的例子,通过子类重写父类的方法,当调用不同对象的相同方法时,会执行不同的实现,体现了多态性。
对象的多态性:一个父类类型的变量可以指向子类类型的对象,这就是对象的多态性。例如:
Animal animal1 = new Animal();
Animal animal2 = new Dog();
animal1.makeSound();
animal2.makeSound();
这里animal1是Animal类型的对象,调用makeSound方法时执行Animal类的实现;animal2虽然声明为Animal类型,但实际上指向的是Dog类型的对象,调用makeSound方法时执行Dog类重写后的实现,这就是对象多态性的体现。
(二)多态的应用场景
多态在 Java 编程中应用广泛,特别是在面向接口编程和设计模式中。例如,在一个图形绘制系统中,可以定义一个Shape类作为父类,包含一个draw方法,然后Circle类和Rectangle类继承自Shape类,并分别重写draw方法。通过多态,可以使用一个Shape类型的数组来存储不同形状的对象,然后统一调用draw方法,实现不同形状的绘制,使得代码更加灵活和可扩展。
面向对象编程是 Java 语言的核心,掌握类与对象、封装、继承、多态等面向对象的基础知识,是深入学习 Java 编程的关键。通过合理运用这些特性,可以编写出结构清晰、易于维护和扩展的高质量 Java 程序。无论是开发小型应用程序还是大型企业级系统,面向对象编程思想都能发挥重要作用。
标签:父类,Java,对象,面向对象,解析,方法,public,构造函数 From: https://blog.csdn.net/zsnandzmn/article/details/145309466