java属性 方法 对象之间的关系 类之间的关系
-
属性(Field/Attribute):
- 属性是类的一部分,用于描述类的状态。
- 属性是变量,可以是基本数据类型或引用类型。
- 在Java中,属性通常定义在类的主体内部,作为类的成员变量。
-
方法(Method/Function):
- 方法是类的一部分,用于描述类的行为。
- 方法是一组执行特定任务的语句集合。
- 方法可以有参数和返回值。
- 在Java中,方法定义在类的主体内部。
-
对象(Object):
- 对象是类的实例。
- 每个对象都有自己的属性和状态,这些状态由对象的属性值决定。
- 对象通过调用其类的方法来执行操作。
- 在Java中,使用
new
关键字和类的构造函数来创建对象。
-
类(Class):
- 类是对象的模板或蓝图,它定义了对象的属性和方法。
- 类描述了具有相同属性和方法的一组对象。
- 类是静态的,而对象是动态的。
生活中的例子:汽车
1. 类(Class):汽车
想象一下,汽车是一个类。它描述了一类具有共同特征的物体:轮子、引擎、方向盘、座椅等。这些特征对应到Java中就是类的属性。相当汽车的制作图。
2. 属性(Field/Attribute):汽车的特性
- 颜色:描述汽车的外观。
- 品牌:标识汽车的制造商。
- 速度:表示汽车当前的行驶速度。
在Java中,这些属性会被定义为类的成员变量。
3. 方法(Method/Function):汽车的行为
- 启动:启动汽车的引擎。
- 加速:增加汽车的行驶速度。
- 刹车:减速并停止汽车。
在Java中,这些方法会被定义为类的方法,用来操作类的属性或执行某种功能。
4. 对象(Object):具体的汽车实例
每辆具体的汽车都是汽车类的一个对象。比如,你有一辆红色的本田汽车,这就是一个具体的对象。它有自己的颜色(红色)、品牌(本田)和状态(例如,当前速度)。你可以启动它、加速它或刹车它,这些都是调用对象的方法。就是汽车本身
// 汽车类
class Car {
// 属性
String color; // 颜色
String brand; // 品牌
int speed; // 速度
// 构造方法
public Car(String color, String brand) {
this.color = color;
this.brand = brand;
this.speed = 0; // 初始速度为0
}
// 方法
public void start() {
System.out.println("汽车启动,引擎轰鸣...");
}
public void accelerate(int increment) {
if (increment > 0) {
speed += increment;
System.out.println("汽车加速,当前速度:" + speed + " km/h");
} else {
System.out.println("加速值必须为正数!");
}
}
public void brake() {
if (speed > 0) {
speed -= 10; // 假设每次刹车减速10 km/h
if (speed < 0) {
speed = 0; // 速度不能为负数,设为0
}
System.out.println("汽车刹车,当前速度:" + speed + " km/h");
} else {
System.out.println("汽车已经停止,无需刹车。");
}
}
// 获取速度的方法
public int getSpeed() {
return speed;
}
// toString方法,用于打印汽车信息
@Override
public String toString() {
return "汽车信息:" +
"颜色=" + color +
", 品牌=" + brand +
", 速度=" + speed + " km/h";
}
}
// 主类
public class Main {
public static void main(String[] args) {
// 创建汽车对象
Car myCar = new Car("红色", "本田");
// 调用汽车对象的方法
myCar.start(); // 启动汽车
myCar.accelerate(20); // 加速到20 km/h
System.out.println(myCar); // 打印汽车信息
myCar.brake(); // 刹车减速
System.out.println(myCar); // 再次打印汽车信息,查看速度变化
}
}
构造方法
在实例化对象时
// 创建汽车对象
Car myCar = new Car("红色", "本田");
我们将参数 "红色","本田" 传给 构造方法 ,实例化对象。
构造方法是用于创建对象并初始化其状态的特殊方法。当你使用new
关键字创建一个对象时,构造方法会被自动调用。构造方法通常与类名相同,没有返回类型(甚至不是void
),并且可以有参数,也可以没有参数。
// 构造方法
public Car(String color, String brand) {
this.color = color;
this.brand = brand;
this.speed = 0; // 初始速度为0
}
set方法、get方法
set
和get
方法通常用于访问类的私有字段(成员变量)。
set
方法用于设置字段的值,而get
方法用于获取字段的值。这样做的好处是封装了类的内部状态,并提供了对状态进行操作的明确接口。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}
在这个扩展的Person
类中,setName
和getName
方法用于访问name
字段,而setAge
和getAge
方法用于访问age
字段。
toString方法
Person
类重写了 Object
类中的 toString()
方法,以便在打印 person
对象时返回一个包含 name
和 age
属性的字符串。
当我们执行 System.out.println(person);
时,person
对象的 toString()
方法被调用,并打印出 Person{name='Alice', age=30}
这样的字符串。
如果我们不重写toString方法,打印输出类时,会输出 com.it.Person@5143c662
,这实际上是Java对象的默认 toString()
方法输出。com.it.Person
是类的全限定名而 @5143c662
是对象的哈希码的无符号十六进制表示
Person.java
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter 和 Setter 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 重写 toString() 方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Main.java
public class Main {
public static void main(String[] args) {
Person person = new Person("Alice", 30);
System.out.println(person);
// 输出:Person{name='Alice', age=30}
//如果不重写toString方法 会输出 类的全限定名+ 对象的哈希码的无符号十六进制
}
}