一个类调用另外一个类的对象
一个类调用另一个类的对象,具体来说:
- UserTest类(调用方)
- 在main方法中创建了User类的对象
- 代码:User user = new User(id: 1, name: "d", password: "d");
- User类(被调用的类)
- 被UserTest类实例化,创建了一个对象
- 这个对象包含了id=1, name='d', password='d'的属性
这就是面向对象编程中的核心概念:
- 一个类可以通过new关键字创建另一个类的对象
- UserTest类调用了User类的构造函数,创建了一个User对象
- 然后可以对这个对象进行操作,比如打印输出:System.out.println(user);
从控制台输出可以看到,成功创建了User对象:User{id=1, name='d', password='d'}
这是Java面向对象编程的基础概念
为什么能调用
1. 类之间的可见性关系
在Java中,类之间能否相互调用主要取决于可见性:
// User.java
public class User { // public表示这个类可以被其他类访问
private int id;
private String name;
private String password;
// 构造函数
public User(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
}
// UserTest.java
public class UserTest {
public static void main(String[] args) {
// 因为User类是public的,所以UserTest可以创建User对象
User user = new User(1, "d", "d");
}
}
2. 为什么能调用的具体原因
包结构关系
从你的项目结构可以看到:
src/main/java/com/itheima/
├── pojo/
│ ├── User.java
│ └── UserTest.java
- User和UserTest都在同一个包com.itheima.pojo下
- 同一个包内的类默认可以相互访问
访问修饰符
- User类声明为public,意味着任何地方都可以访问
- User类的构造函数也是public的,允许外部创建对象
3. 调用过程详解
User user = new User(id: 1, name: "d", password: "d");
这行代码的执行过程:
- new关键字:告诉JVM要创建一个新对象
- User(...):调用User类的构造函数
- 参数传递:将id=1, name="d", password="d"传给构造函数
- 对象创建:JVM在内存中分配空间,创建User对象
- 引用赋值:将新创建的对象地址赋给user变量
4. 如果无法调用的情况
如果User类是这样定义的:
class User { // 没有public,只有包内可见
// ...
}
5. 总结
UserTest能调用User类创建对象,是因为:
- 可见性:User类是public的
- 包关系:两个类在同一个包下
- 构造函数:User类的构造函数是public的
- 语法正确:使用了正确的new关键字和构造函数调用