【JAVA学习笔记】45 - (35 - 43)第十章作业

项目代码

https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/homework10

1.静态属性的共享性质

判断下列输出什么

public class HomeWork01 {
    public static void main(String[] args) {
        Car c =new Car();//无参构造时改变color为red
        Car c1=new Car(100);//price改为100,是c1对象的值
        System.out.println(c);//out 9 red
        System.out.println(c1);//out 100 red

    }
}
class Car{
    double price=10;
    static String color="white";//静态方法,共享属性
    public String toString(){
        return price+"\t"+color;
    }
    public Car(){
        this.price=9;
        this.color="red";
    }
    public Car(double price){
        this.price=price;
    }
}

2.静态私有属性

1.在Frock类中声明私有的静态属性currentNum[int类型],初始值为100000,作为衣服出厂的序列号起始值。

2.声明公有的静态方法getNextNum,作为生成上衣唯序列号的方法。每调用一次,将
currentNum增加100,并作为返回值

3.在TestFrock类的main方法中, 分两次调用getNextNum方法, 获取序列号并打印输出。

4.在Frock类中声明serialNumber(序列号)属性, 并提供对应的get方法;

5.在Frock类的构造器中,通过调用getNextNum方法为Frock对象获取唯- -序列号,赋给
serialNumber属性。

6.在TestFrock类的main方法中, 分别创建三个Frock对象,并打印三个对象的序列号,验
证是否为按100递增。
 

满简单的 练习使用静态方法和属性练练

/**
 * @author 银海
 * @version 1.0
 */
public class HomeWork02 {
    public static void main(String[] args) {
        System.out.println(Frock.getNextNum());
        System.out.println(Frock.getNextNum());
        Frock frock = new Frock();
        Frock frock1 = new Frock();
        Frock frock2 = new Frock();
        System.out.println(frock.getSerialNumber());
        System.out.println(frock1.getSerialNumber());
        System.out.println(frock2.getSerialNumber());


    }
}
class Frock{
    private static int currentNum = 100000;
    private int serialNumber;

    public static int getNextNum(){
        currentNum += 100;
        return currentNum;
    }

    public Frock() {
        getNextNum();
        serialNumber = currentNum;
    }

    public int getSerialNumber() {
        return serialNumber;
    }
}

3. 抽象类方法的调用

按要求实现下列问题:

1.动物类Animal包含了抽象方法shout();

2. Cat类继承了Animal,并实现方法shout,打印“猫会喵喵叫"

3. Dog类继承了Animal,并实现方法shout,打印“狗会汪汪叫”

4.在测试类中实例化对象Animal cat =new Cat,并调用cat的shout方法

5.在测试类中实例化对象Animal dog=new Dog.并调用dog的shout方法
 

也蛮简单的 练习使用抽象类

/**
 * @author 银海
 * @version 1.0
 */
public class HomeWork03 {
    public static void main(String[] args) {
        Animal cat = new Cat();
        cat.shout();//动态绑定
        Animal dog = new Dog();
        dog.shout();
    }
}
abstract class Animal{
    public abstract void shout();
}
class Cat extends Animal{
    public void shout(){
        System.out.println("猫喵喵叫....");
    }
}
class Dog extends Animal{
    public void shout(){
        System.out.println("狗汪汪叫....");
    }
}

4.匿名内部类的使用

1.计算器接口具有work方法,功能是运算,有一个手机类Cellphone, 定义方法testWork测试计算功能,调用计算接口的work方法

        //注意这里只是调用计算接口的work方法,而不是cellphone类去实现接口,因为实际需求中计算器功能是可变的,可以重写work方法然后类去实现接口,但这样本质上保证不了可变性,我们的计算方法是固定的。那么怎么解决这个问题呢,使用匿名内部类重写接口方法

2.要求调用CellPhone对象 的testWork方法,使用上匿名内部类

/**
 * @author 银海
 * @version 1.0
 */
public class HomeWork04 {
    public static void main(String[] args) {
        CellPhone cellPhone = new CellPhone();
        cellPhone.textWork(new ICalculator() {
            @Override
            public double work(double n1, double n2) {
                return n1 + n2;
            }
        },10,18);
        cellPhone.textWork(new ICalculator() {
            @Override
            public double work(double n1, double n2) {
                return n1 * n2;
            }
        },10,18);
    }
}

interface ICalculator {
    double work(double n1 ,double n2);//接口是抽象类 不能有方法体 实现的work只是调用时的规范
}

class CellPhone {
    public void textWork(ICalculator iCalculator,double n1,double n2){
        //传入的iCal实际上运行类型是一个叫ICalculator$1的一个类
        //动态绑定之后,运行的是$1也就是匿名类的方法体,也就是说我们可以使用一次而且自己随意改变方法体的内容
        double res = iCalculator.work(n1,n2);//动态绑定
        System.out.println("结果为" + res);
    }
}

拿下!

5.局部内部类和成员内部类

        1.编一个类A,在类中定义局部内部类B,B中有一个私有常量name,有一个方法show()打印常量name.进行测试

        2.进阶: A中也定义一个私有的变量name,在show方法中打印测试

/**
 * @author 银海
 * @version 1.0
 */
public class HomeWork05 {
    public static void main(String[] args) {
        A a = new A();
        a.new B().show();
        a.f1();
    }
}
class A {
    private String name = "我是外部类的name";
    class B{
        private String name = "我是内部类的name";
        public void show(){
            System.out.println(name);
            System.out.println(this.name);
            System.out.println(B.this.name);
            System.out.println(A.this.name);
            //其实可以看做我们对象名前的类名限定了对象的访问范围
        }//如果想要打印,外部类的name变量,可以使用类名.this.name;
    }//如果想要访问成员内部类的show方法 需要编写方法返回一个成员内部类的对象然后嗲用
    //或者是在外部其他类直接调用
    //如果是局部内部类,需要写在方法内
    public void f1(){
        class B{
            private String name = "我是局部内部类";
            public void show(){
                System.out.println(name);
                System.out.println(this.name);
                System.out.println(A.this.name);

            }
        }
        //如果想在外部其他类访问局部内部类 需要在方法体内创建对象
        new B().show();
    }
}

6.接口类 和 类等等的设计思路

可以多看看这个作业,对接口和调用接口类的了解可以更上一层楼

1.有一个交通工具接口类Vehicles,有work接口

2. 有Horse类和Boat类分别实现Vehicles

3.创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat

4.有Person类, 有name和Vehicles属性, 在构造器中为两个属性赋值

5.实例化Person对象"唐僧”,要求一般情况下用Horse作为交通工具,遇到大河时用Boat
作为交通工具

6.增加一个过火焰山,用飞机

分析

                

不太会写这个导图,表达不出来思路

public class HomeWork06 {
    public static void main(String[] args) {
        Person tangseng = new Person("唐僧");
        tangseng.walk();
        tangseng.walk();
        tangseng.passRiver();
        tangseng.passRiver();
        tangseng.walk();
        tangseng.passRiver();
        //添加一个过火焰山的 正常来说就过一次火焰山,用一次飞机,所以直接用匿名内部类
        //分析应该是基于接口的匿名内部类,内部重写work方法,这个匿名对象只创建一次
        tangseng.flightFlamesMountain();

    }
}
class Person{
    private String name;
    private Vehicles vehicles;

    public Person(String name) {
        this.name = name;
        this.vehicles = Horse.HORSE;
    }
    public void walk(){
        System.out.println("=================");
        System.out.println("走路的时候用马");
        if(!(vehicles instanceof Horse)){//还需要判断一下目前是不是马,是马就不用getHorse
            System.out.println("现在还不是马 骑上白龙马赶路");
            vehicles = VehFactory.getHorse();
        }else{
            System.out.println("现在依然是马,接着赶路");
        }
        vehicles.work();
        System.out.println("=================");
    }
    public void passRiver(){
        System.out.println("=================");
        System.out.println("过河的时候用船");
        if(!(vehicles instanceof Boat)){//还需要判断一下目前是不是船,是船就不用getBoat
            System.out.println("现在还不是船 借一艘船过河");
            vehicles = VehFactory.getBoat();
        }else{
            System.out.println("现在依然是船,接着过河");
        }
        vehicles.work();
        System.out.println("=================");
    }
    public void flightFlamesMountain(){
        System.out.println("=================");
        System.out.println("过火焰山的时候用飞机");
        vehicles = new Vehicles() {
            @Override
            public void work() {
                System.out.println("飞机呼呼飞");
            }
        };
        vehicles.work();
        System.out.println("=================");
    }

}
interface Vehicles{//定义规范 以及方便调用
    void work();
}
class VehFactory{
    public static Horse getHorse(){
        return Horse.HORSE;
    }
    public static Boat getBoat(){
        return new Boat();
    }
}
class Horse implements Vehicles{//需要符合规范而且实现接口
    private String name;
    public static final Horse HORSE = new Horse("白龙马");
    //唐僧骑的是白龙马 所以应该是固定的一匹马
    private Horse(String name){
        this.name = name;
    }
    @Override
    public void work() {
        System.out.println("小马走呀走");
    }
}
class Boat implements Vehicles{//需要符合规范而且实现接口
    @Override
    public void work() {
        System.out.println("小船划呀划");
    }
}

 

7.成员内部类的使用

        有一个Car类,有属性temperature (温度)车内有Air (空调)类,有吹风的功能flow,Air会监视车内的温度,如果温度超过40度则吹冷气。如果温度低于0度则吹暖气,如果在这之间则关掉空调。实例化具有不同温度的Car对象,调用空调的flow方法,测试空调吹的风是否正确。

很简单 练练成员内部类的实例化

/**
 * @author 银海
 * @version 1.0
 */
public class HomeWork07 {
    public static void main(String[] args) {
        Car car = new Car(500);
        car.useAir();
        Car car1 = new Car(-500);
        car1.useAir();
        Car car2 = new Car(5);
        car2.useAir();
        //注意 成员内部类的使用还可以
        car.new Air().flow();//这么用,但是为了方便懒得这样用,在Car内做一个方法useAir,在里面new Air().flow();
    }
}
class Car{
    private int temperature;

    public Car(int temperature) {
        this.temperature = temperature;
    }

    class Air{
        public void flow(){
            if(temperature > 40){
                System.out.println("冷风");
            }else if(temperature < 0){
                System.out.println("热风");
            }
            else{
                System.out.println("不吹");
            }
        }
    }
    public void useAir(){
        new Air().flow();
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/105679.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis快速上手篇(四)(Spring Cache,缓存配置)(注解方式)

Spring Cache 从3.1开始&#xff0c;Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的 使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。 使用Spring Cache需要我们做两方面…

聚观早报 |2024款飞凡R7官宣;小米14新配色材质

【聚观365】10月27日消息 2024款飞凡R7官宣 小米14新配色材质 金山办公2023第三季度业绩 IBM2023第三季度业绩 新东方2024财年第一季度业绩 2024款飞凡R7官宣 飞凡汽车官宣&#xff0c;2024款飞凡R7将于11月上市&#xff0c;新车将搭载飞凡巴赫座舱&#xff0c;同时超过1…

endnote设置

问题1&#xff1a;参考文献的tab太长 首先要在endnote里面这样设置&#xff0c;file->output->edit "XXX" 保存之后&#xff0c;在word更新目录。 在word里面设置悬挂缩进 结果&#xff1a; Endnote参考编号与参考文献距离太远怎么调整 endnote 文献对齐方式…

正点原子嵌入式linux驱动开发——外置RTC芯片PCF8563

上一章学习了STM32MP1内置RTC外设&#xff0c;了解了Linux系统下RTC驱动框架。一般的应用场合使用SOC内置的RTC就可以了&#xff0c;而且成本也低&#xff0c;但是在一些对于时间精度要求比较高的场合&#xff0c;SOC内置的RTC就不适用了。这个时候需要根据自己的应用要求选择合…

解决报错:gnutls_handshake() failed: The TLS connection was non-properly terminated.

执行git clone的时候&#xff0c;出现错误&#xff1a;gnutls_handshake() failed: The TLS connection was non-properly terminated. 如图&#xff1a; 解决方式&#xff1a; 两次重置代理&#xff1a;完美解决 git config --global --unset https.https://github.com.pro…

网络搭建和运维的基础题目

服务部分&#xff08;linux&#xff09; 实操部分 1.在任意文件夹下面创建形如 A/B/C/D 格式的文件夹系列。 [rootlocalhost ~]# mkdir -p A/B/C/D 2.在创建好的文件夹下面&#xff0c;A/B/C/D &#xff0c;里面创建文本文件 mkdir.txt [rootlocalhost ~]# cd A/B/C/D [r…

7.MySQL复合查询

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 复合查询 基本查询回顾 多表查询 自连接 子查询 单行子查询 多行子查询 多列子查询 在from子句中使用子查询 合并查询 union union all 实战OJ 复合查询 前面我们讲解的mysql表的查询都是对一张表进行查询…

jenkins、ant、selenium、testng搭建自动化测试框架

如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入&#xff0c;然后写一些测试脚本&#xff0c;这就是你所说的自动化测试&#xff0c;其实这个还不能算是真正的自动化测试&#xff0c;你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗&#xff…

竞赛 深度学习人脸表情识别算法 - opencv python 机器视觉

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人脸表情识别系…

【方法】如何给PDF文件添加“打开密码”?

PDF文件可以在线浏览&#xff0c;但如果想要给文件添加“打开密码”&#xff0c;就需要用到软件工具&#xff0c;下面小编分享两种常用的工具&#xff0c;小伙伴们可以根据需要选择。 工具一&#xff1a;PDF编辑器 PDF阅读器一般是没有设置密码的功能模块&#xff0c;PDF编辑器…

nodejs+vue 电子书阅读系统

本文首先介绍了电子书阅读系统的发展背景与发展现状&#xff0c;然后遵循软件常规开发流程&#xff0c;首先针对系统选取适用的语言和开发平台&#xff0c;随着网络技术的不断发展&#xff0c;多媒体技术应用渐渐的出现在教育领域中&#xff0c;电子书阅读已经成为社会的一个热…

云计算模式的区域LIS系统源码,基于ASP.NET+JQuery、EasyUI+MVC技术架构开发

云计算模式的区域LIS系统源码 云LIS系统源码&#xff0c;自主版权 LIS系统是专为医院检验科的仪器设备能与计算机连接。可通过LIS系统向仪器发送指令&#xff0c;让仪器自动操作和接收仪器数据。并快速的将检验仪器中的数据导入到医生工作站中进行管理&#xff0c;且可将检验结…

【Python】collections.Counter

Python内置模块collections中的Counter是字典子类。Counter不是字典&#xff0c;但很像字典。 Counter具有字典的键和值&#xff0c;键是各个元素&#xff0c;值为该元素出现的次数。 Counter相当于计数器。常用于哈希映射&#xff08;哈希表&#xff09;。 from collection…

物理世界的互动之旅:Matter.js入门指南

本文简介 戴尬猴&#xff0c;我是德育处主任 欢迎来到《物理世界的互动之旅&#xff1a;Matter.js入门指南》。 本文将带您探索 Matter.js&#xff0c;一个强大而易于使用的 JavaScript 物理引擎库。 我将介绍 Matter.js 的基本概念&#xff0c;包括引擎、世界、物体和约束等…

PyTorch卷积神经网络各层实现与介绍

本文将讲解&#xff0c;PyTorch卷积神经网络各层实现与介绍&#xff0c;包括&#xff1a;基本骨架–nn.Module的使用、卷积操作、卷积层、池化层、激活函数、全连接层的介绍。 &#x1f61c; 对于相关原理&#xff0c;可以跳转&#x1f449;卷积神经网络CNN各层基本知识 &…

vscode不显示横滚动条处理

最近发现vscode打开本地文件不显示水平的滚动条&#xff0c;但是打开一个临时文件是有水平滚动条的。 解决方案 可以一个个试 vscode配置 左下角设置–设置–搜索Scrollbar: Horizontal auto 自动visible 一直展示hidden 一直隐藏 拖动底部状态栏 发现是有的&#xff0c;但是…

LRU算法

1. 算法介绍 LRU&#xff08;Least Recently Used&#xff09;算法是一种常见的缓存替换算法&#xff0c;用于管理缓存中的数据项。它的核心思想是将最近最少使用的数据项&#xff08;最久未被访问的数据项&#xff09;替换出缓存&#xff0c;以便为新的数据项腾出空间。 LRU…

windows 离线安装 vue 环境

由于公司要求在内网开发项目&#xff0c;而内网不能连接外网&#xff0c;因此只能离线安装 vue 环境&#xff0c;在网上找过很多的离线安装方法&#xff0c;但都没有成功&#xff0c;于是在不断的尝试中找到了以下方法。 1、找一台与内网电脑相同系统的有网电脑。 2、在有网的电…

提升日期处理效率:day.js 实战经验分享

本文简介 点赞 关注 收藏 学会了 本文主要介绍我在工作中使用 day.js 较多的方法。 本文并不能代替 day.js 官方文档&#xff0c;日常工作中该查文档的还是要查文档。 本文是写给刚接触 day.js 的工友&#xff0c;让这部分工友能更顺利上手 day.js。 本文不涉及 day.js 插件…

STM32中除零运算,为何程序不崩溃?

在 C 语言中&#xff0c;除零运算会导致异常吗&#xff1f; 在 C 语言中&#xff0c;当一个数除以零时&#xff0c;会导致除法运算错误&#xff0c;通常表现为“除以零”错误或被称为“浮点异常”&#xff08;floating-point exception&#xff09;。 对于整数除法&#xff0c…