2020-12-19

                ## 内部类学习笔记12/19

前言

上一章我们使用抽象方法,接口以及他们的实现类解决了两个问题,本次我们讨论使用匿名内部类来代替子类和接口实现类的方法完成之前的两个题目


提示:以下是本篇文章正文内容,下面案例可供参考

一、需求说明

需求说明:原始的手机,可以发短信,通电话。随着发展,手机增加了音频、视频播放、拍照、上网功能。按照下面的类图进行程序设计:首先,编写类及接口,参照以下类的结构图;其次,编写测试类,让普通手机播放音频、发信息和通电话,让智能手机上网、播放视频、照相、发彩信和视频通电话。
在这里插入图片描述
在这里插入图片描述

二、代码块

1.手机类

代码如下(示例):

package HomeWork04;

public abstract class Handset {
    private NetWork netWork;
    private PlayWiring  play;
    private TheakePictures Picture;
    public NetWork getNetWork() {
        return netWork;
    }

    public void setNetWork(NetWork netWork) {
        this.netWork = netWork;
    }

    public PlayWiring getPlay() {
        return play;
    }

    public void setPlay(PlayWiring play) {
        this.play = play;
    }

    public TheakePictures getPicture() {
        return Picture;
    }

    public void setPicture(TheakePictures picture) {
        Picture = picture;
    }





    private String brand;
    private String type;

    public Handset(String brand, String type) {
        this.brand = brand;
        this.type = type;
    }
    public Handset() {
        this.brand = brand;
        this.type = type;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    abstract void  sendInfo();
    abstract void  call();
    public void  info(){
        System.out.println("这是一款型号为"+getType()+"的"+getBrand()+"手机"+":");
    };
}

2.接口类

代码如下(示例):

package HomeWork04;

public interface NetWork {
    abstract void networkConn();
}

package HomeWork04;

public interface PlayWiring {
    abstract void play(String content);

}


package HomeWork04;

public interface TheakePictures {
    abstract void takePictare();
}


3.测试类

<font color=#999AAA >代码如下(示例):
package HomeWork04;

public class Test
{
    public static void main(String[] args) {
        //普通手机
        Handset h = new Handset() {
            @Override
            void sendInfo() {
                System.out.println("发送文字信息");
            }

            @Override
            void call() {
                System.out.println("开始语音通话");
            }
        };
       h.setPlay(new PlayWiring() {
           @Override
           public void play(String content) {
               System.out.println("开始播放音乐"+content);
           }
       });
       h.setBrand("索尼爱立信");
       h.setType("G502c");
       h.info();
       h.getPlay().play("热雪");
       h.sendInfo();
       h.call();
      //智能手机
        h=new Handset() {
            @Override
            void sendInfo() {
                System.out.println("发送带图片与文字的信息");
            }

            @Override
            void call() {
                System.out.println("开始视频通话");
            }
        };
        h.setPlay(new PlayWiring() {
            @Override
            public void play(String content) {
                System.out.println("开始播放视频"+content);
            }
        });
        h.setPicture(new TheakePictures() {
            @Override
            public void takePictare() {
                System.out.println("咔嚓..拍照成功");
            }
        });
        h.setNetWork(new NetWork() {
            @Override
            public void networkConn() {
                System.out.println("已经启动移动网络");
            }
        });

        h.setBrand("I9100");
        h.setType("HTC");
        h.info();
        h.getNetWork();
        h.getPlay().play("小时代");
        h.getPicture();
        h.sendInfo();
        h.call();






    }

}



二.需求说明

需求说明:采用面向接口编程思想组装一台计算机,计算机的主要组成部分有:CPU、硬盘、内存:首先,定义CPU的接口CPU,返回CPU品牌和主频;其次,定义内存的接口EMS,返回容量;再次,定义硬盘的接口HardDisk,返回容量;然后,编写各组件厂商分别实现CPU、EMS、和HardDisk接口,编写计算机类,组装计算机并显示相关信息;最后,编写测试类运行如图所示的效果。
在这里插入图片描述
在这里插入图片描述

一 代码块

接口类

package HomeWork05;

public interface CPU {
    String brand();
    String hz();
}

package HomeWork05;

public interface EMS {
    String volume();
}

package HomeWork05;

public interface HardDisk {
    String volume();
}

电脑类

package HomeWork05;

public class Computer {
    private  CPU cpu;
    private  EMS ems;
    private  HardDisk hardDisk;

    public CPU getCpu() {
        return cpu;
    }

    public void setCpu(CPU cpu) {
        this.cpu = cpu;
    }

    public EMS getEms() {
        return ems;
    }

    public void setEms(EMS ems) {
        this.ems = ems;
    }

    public HardDisk getHardDisk() {
        return hardDisk;
    }

    public void setHardDisk(HardDisk hardDisk) {
        this.hardDisk = hardDisk;
    }

    public Computer(CPU cpu, EMS ems, HardDisk hardDisk) {
        this.cpu = cpu;
        this.ems = ems;
        this.hardDisk = hardDisk;
    }
    public Computer() {

    }
    public void show(){
        System.out.println("计算机的品牌如下:\nCpu的品牌是:"+getCpu().brand()+",主频是"+getCpu().hz()+"\n硬盘容量是:"+getHardDisk().volume()+"\n内存容量是:"+getEms().volume());

    }
}

测试类

package HomeWork05;

public class Test {
    public static void main(String[] args) {
        Computer c = new Computer();
        c.setCpu(new CPU() {
            @Override
            public String brand() {
                return "Intel";
            }

            @Override
            public String hz() {
                return "3.8GHZ";
            }
        });

        c.setHardDisk(new HardDisk() {
            @Override
            public String volume() {
                return "3000GB";
            }
        });
        c.setEms(new EMS() {
            @Override
            public String volume() {
                return "4GB";
            }
        });

        c.show();
    }
}

总结

例如:以上就是今天要讲的内容,本文仅仅简单介绍了匿名内部类的使用,其余细节并未展现
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值