Java中使用类作为成员变量
任何类型都可以作为类的成员变量
像一开始接触的String类,就是一个类,引用数据类型。
使用 类 类型作为成员变量就是相当于将类创建对象,将对象的地址值传递给成员变量。
将成员变量当做对象名进行操作
。
一、类作为成员变量
案例分析
1.定义一个Computer类
2.在Person类定义两个成员变量,其中一个用Computer来定义
3.编写测试类,测试代码功能
//定义Computer类
class Computer{
private String CPU;
private String RAM;
//无参有参构造方法,getter和setter方法
public Computer() {}
public Computer(String CPU, String RAM) {this.CPU = CPU;this.RAM = RAM;}
public String getCPU() {return CPU;}
public void setCPU(String CPU) {this.CPU = CPU;}
public String getRAM() {return RAM;}
public void setRAM(String RAM) {this.RAM = RAM;}
}
//定义Person类
class Person{
private String name;
//类作为成员变量
private Computer computer;
//无参有参构造方法,getter和setter方法
public Person() {}
public Person(String name, Computer computer) {this.name = name;this.computer = computer;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public Computer getComputer() {return computer;}
public void setComputer(Computer computer) {this.computer = computer;}
//定义一个成员方法,用于打印信息
public void useComputer(){
System.out.println(name+"正在使用电脑的配置是,\nCPU:"+computer.getCPU()+"\n内存:"+computer.getRAM());
}
}
public class Test {
public static void main(String[] args) {
//通过构造方法,向Computer的变量赋值
Computer computer = new Computer("i9-9900k","32G");
//通过构造方法,向Person的变量赋值
Person person = new Person("张三丰",computer);
//用useComputer方法,查看数据传递结果
person.useComputer();
}
}
运行结果
二、接口作为成员变量
案例分析
1.定义一个接口Use,用作Person的成员变量
2.接口Use必须有实现类才能使用
3.在People中将接口Use定义为成员变量
4.在People类中创建成员方法,使用接口的成员变量,调用接口中的抽象方法。
5.创建测试类,测试代码功能
interface Use{
void use();
}
//创建接口的实现类
class UseComputerImpl implements Use{
@Override
public void use() {System.out.println("正在使用电脑");}
}
//定义一个People类,将接口作为成员变量
class People{
private String name;
//接口类型作为成员变量
private Use use;
//无参有参构造方法,因为没有使用到getter和setter方法,这里省略。平时使用中,不推荐省略
public People() {}
public People(String name, Use use) {this.name = name;this.use = use;}
//创建一个使用接口的成员方法,用于打印信息
public void useComputer(){
System.out.print(name);
//使用接口对象,调用实现类方法
use.use();
}
}
//测试类,对编写的代码进行测试
public class Test {
public static void main(String[] args) {
//创建实现类对象(自动向上转型为接口类型)
Use use = new UseComputerImpl();
//使用People的有参构造,向成员变量传递数据
People people = new People("张三丰",use);
//使用People的对象调用useComputer方法查看数据传递结果
people.useComputer();
}
}
运行结果
接下来我们扩展一下
使用内部类和匿名对象内部类进行传参
这样可以省略实现类的编写
需要补充内部类的相关知识 请点这里
新建一个 Test2 测试类,上述代码保持不变
public class Test2 {
public static void main(String[] args) {
//使用匿名内部类创建接口对象
Use use = new Use() {
@Override
public void use() {
System.out.println("正在使用电脑");
}
};
//使用People的有参构造,向成员变量传递数据
People peopleOne = new People("张三",use);
//使用People的对象调用useComputer方法查看数据传递结果
peopleOne.useComputer();
//=====================================================
//使用匿名内部类、匿名对象传参
People peopleTwo = new People("李四", new Use() {
@Override
public void use() {
System.out.println("正在使用电脑");
}
});
//使用People的对象调用useComputer方法查看数据传递结果
peopleTwo.useComputer();
}
}
运行结果