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();
    }
}

运行结果
在这里插入图片描述

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值