面向对象编程概念
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将现实世界中的事物抽象为对象,通过对象之间的交互来解决问题。Java是一门完全面向对象的编程语言。
面向对象三大特性
封装(Encapsulation)
封装是将数据和操作数据的方法绑定在一起,形成一个独立的单元(即类),并尽可能隐藏对象的内部实现细节。
public class Person {
// 使用private关键字隐藏属性
private String name;
private int age;
// 提供公共方法访问私有属性
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age > 0 && age < 150) {
this.age = age;
}
}
}
继承(Inheritance)
继承允许一个类获取另一个类的属性和方法,实现代码的重用。被继承的类称为父类(超类),继承父类的类称为子类。
// 父类
public class Animal {
protected String name;
public void eat() {
System.out.println(name + "正在吃东西");
}
}
// 子类继承父类
public class Dog extends Animal {
public void bark() {
System.out.println(name + "正在汪汪叫");
}
}
// 使用示例
Dog dog = new Dog();
dog.name = "旺财";
dog.eat(); // 继承自父类的方法
dog.bark(); // 子类自己的方法
多态(Polymorphism)
多态是指同一个接口可以有多种不同的实现方式。在Java中,多态主要通过方法重写和方法重载来实现。
// 父类
public class Shape {
public void draw() {
System.out.println("绘制图形");
}
}
// 子类1
public class Circle extends Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
// 子类2
public class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
// 多态的使用
Shape shape1 = new Circle(); // 父类引用指向子类对象
Shape shape2 = new Rectangle(); // 父类引用指向子类对象
shape1.draw(); // 输出:绘制圆形
shape2.draw(); // 输出:绘制矩形
抽象类与接口
抽象类
抽象类不能被实例化,通常包含抽象方法(没有具体实现的方法)和具体方法。
public abstract class Animal {
protected String name;
// 抽象方法
public abstract void makeSound();
// 具体方法
public void sleep() {
System.out.println(name + "正在睡觉");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵喵喵");
}
}
接口
接口是一种完全抽象的类,只包含常量和抽象方法。一个类可以实现多个接口。
public interface Flyable {
void fly();
}
public interface Swimmable {
void swim();
}
// 实现多个接口
public class Duck implements Flyable, Swimmable {
@Override
public void fly() {
System.out.println("鸭子在飞翔");
}
@Override
public void swim() {
System.out.println("鸭子在游泳");
}
}