Java面向对象设计
1. 概述
Java是一种面向对象的编程语言,它的核心思想是将现实世界中的事物抽象为对象,并通过类来定义对象的属性和行为。面向对象的设计可以提供更好的可扩展性、可维护性和重复使用性,使程序更加易于理解和维护。
2. 类和对象
在Java中,类是对象的模板,它定义了对象的属性和行为。对象是类的一个实例,它可以有自己的状态(属性)和行为(方法)。下面是一个简单的示例,展示了如何定义一个类和创建对象:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void sayHello() {
System.out.println("Hello, my name is " + name);
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("John", 20);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
person.sayHello();
}
}
在上面的例子中,我们定义了一个Person
类,它有两个私有属性name
和age
,以及一个构造方法和三个公有方法。在Main
类中,我们创建了一个Person
对象,并调用了它的方法。
3. 封装
封装是面向对象设计的重要概念之一,它指的是将数据和方法封装在类中,通过访问修饰符来控制对外部的可见性。在Java中,我们可以使用private
、protected
、public
和默认访问修饰符来限制对属性和方法的访问。下表展示了这些访问修饰符的作用:
访问修饰符 | 同类 | 同包 | 子类 | 其他包 |
---|---|---|---|---|
private | ✔️ | |||
默认 | ✔️ | ✔️ | ||
protected | ✔️ | ✔️ | ✔️ | |
public | ✔️ | ✔️ | ✔️ | ✔️ |
我们来看一个例子,展示如何使用封装来保护对象的属性:
public class Circle {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public double getArea() {
return Math.PI * Math.pow(radius, 2);
}
}
public class Main {
public static void main(String[] args) {
Circle circle = new Circle(5.0);
System.out.println("Radius: " + circle.getRadius());
System.out.println("Area: " + circle.getArea());
}
}
在上面的例子中,Circle
类有一个私有属性radius
,通过getRadius()
方法可以获取它的值,而getArea()
方法用来计算圆的面积。这样做的好处是,在类的外部无法直接修改radius
的值,保证了对象的数据安全性。
4. 继承
继承是面向对象设计中的另一个重要概念,它允许我们创建一个新的类,并从现有的类中继承属性和方法。被继承的类称为父类或超类,新创建的类称为子类。子类可以添加新的属性和方法,也可以重写父类的方法。下面是一个示例,展示了如何使用继承:
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void sleep() {
System.out.println(name + " is sleeping.");
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void bark() {
System.out.println(getName() + " is barking.");
}
}
public class Main {
public static void