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

news2024/10/6 21:32:52

项目代码

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙跨平台框架来了ArkUi-X

前言&#xff1a; 各位同学大家有段时间没有给大家更新博客了 之前鸿蒙推出了鸿ArkUi-X 框架所以就写个文章分享一下 效果图&#xff1a; 首先需要下载支持 ArkUI-X 套件的华为开发工具 DevEco &#xff0c;版本为 4.0 以上&#xff0c;目前可以下载预览版进行体验。下载地址…

常见的网络攻击类型及防范措施

网络攻击是指针对计算机网络、系统或数据的恶意行为&#xff0c;旨在破坏、入侵、窃取信息或干扰网络服务。网络攻击的类型多种多样&#xff0c;以下是一些常见的网络攻击类型&#xff1a; DDoS 攻击&#xff08;分布式拒绝服务攻击&#xff09;&#xff1a; 攻击者通过多个受感…

【数据集】指针式圆形表计关键点数据集

指针式圆形表计关键点数据集 数据集简介数据集一览 数据集简介 数据类型&#xff1a;指针式圆形表计ROI区域 数据数量&#xff1a;1069 标注标签&#xff1a;中心点&#xff0c;起点&#xff0c;终点&#xff0c;指针端点 图像质量&#xff1a;高清90%&#xff0c;较模糊10% …

如何利用视频号提取视频,视频号下载视频教程

随着视频号的兴起&#xff0c;越来越多的人开始关注这个平台&#xff0c;并希望能够提取视频号中的精彩视频。然而&#xff0c;视频号并不支持直接下载视频&#xff0c;也不能复制链接。那么&#xff0c;我们如何才能实现视频号提取视频的需求呢&#xff1f;答案就是借助视频下…

苹果将于10月31日举行今秋的第二场发布会

在今日凌晨&#xff0c;苹果宣布&#xff0c;将于北京时间10月31日早上8点举行今秋的第二场发布会&#xff0c;主题为“来势迅猛”。据多方猜测苹果本次活动的核心产品大概率是搭载全新M3芯片的Mac系列产品。 据了解&#xff0c;在苹果的产品线中&#xff0c;搭载M3芯片的Mac系…

【强化学习】09——价值和策略近似逼近方法

文章目录 前言对状态/动作进行离散化参数化值函数近似值函数近似的主要形式Incremental MethodsGradient DescentLinear Value Function ApproximationFeature Vectors特征化状态Table Lookup Features Incremental Prediction AlgorithmsMonte-Carlo with Value Function Appr…

【蓝桥杯选拔赛真题02】C++计算天数 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++计算天数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <

VR全景拍摄市场需求有多大?适用于哪些行业?

随着VR全景技术的成熟&#xff0c;越来越多的商家开始借助VR全景来宣传推广自己的店铺&#xff0c;特别是5G时代的到来&#xff0c;VR全景逐渐被应用在我们的日常生活中的各个方面&#xff0c;VR全景拍摄的市场需求也正在逐步加大。 通过VR全景技术将线下商家的实景“搬到线上”…

102.linux5.15.198 编译 firefly-rk3399(1)

1. 平台&#xff1a; rk3399 firefly 2g16g 2. 内核&#xff1a;linux5.15.136 &#xff08;从内核镜像网站下载&#xff09; 3. 交叉编译工具 gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 4. 宿主机&#xff1a;ubuntu18.04 5. 需要的素材和资料&#xff…

点击弹出实现模拟百度那样子

<uni-section title"输入框示例" type"line" padding><view class"dialog-box"><text class"dialog-text">输入内容&#xff1a;{{ value }}</text></view><button class"button" type&qu…

支付宝支付接入流程

一、 接入准备 支付宝支付流程没有微信那么复杂&#xff0c;而且支付宝支持沙箱。登录支付宝开放平台控制台 点击开发工具中的沙箱 接口加密方式&#xff0c;我这里使用的是自定义密钥。生成密钥的方式 使用支付宝官方提供的密钥工具&#xff0c;唯一要注意的是支付宝密钥工具…

12 原子性|可见性|有序性|JMM内存模型

1 并发三大特性 1.1 原子性 一个或多个操作&#xff0c;要么全部执行&#xff0c;要么全部不执行。Java中&#xff0c;对基本数据类型的变量的读取和赋值操作是原子性操作&#xff0c;但不采取任何原子性保障措施的自增操作不是原子性的&#xff0c;如&#xff1a;i public c…

C语言系统化精讲(六):C语言选择结构和循环结构

文章目录 一、C语言选择结构1.1 if语句1.2 if…else语句1.3 else if语句1.4 if语句的嵌套1.5 条件运算符1.6 switch语句的基本形式1.7 多路开关模式的switch语句1.8 if…else语句和switch语句的区别 二、C语言循环结构2.1 C语言while循环和do while循环详解2.1.1 while循环2.1.…

基于机器视觉的停车位识别检测 计算机竞赛

简介 你是不是经常在停车场周围转来转去寻找停车位。如果你的车辆能准确地告诉你最近的停车位在哪里&#xff0c;那是不是很爽&#xff1f;事实证明&#xff0c;基于深度学习和OpenCV解决这个问题相对容易&#xff0c;只需获取停车场的实时视频即可。 该项目较为新颖&#xf…

为什么后端老是觉得前端简单?

首先&#xff0c;相对于后端来说&#xff0c;前端入门的门槛较低&#xff0c;有些人因程序员的高薪酬而转行&#xff0c;却又不愿学习更多的知识和技术&#xff0c;入行很久却还在做着最基础的工作&#xff0c;久而久之&#xff0c;前端工程师的技术水平参差不齐&#xff0c;进…

【嵌入式开发 Linux 常用命令系列 8 --代码格式修改工具 astyle】

文章目录 AStyle 介绍Ubuntu 下安装Windows 下安装 AStyle 介绍 AStyle&#xff0c;全名 Artistic Style&#xff0c;是一款源代码格式化工具。它可以自动格式化 C&#xff0c;C&#xff0c;C#&#xff0c;和Java源代码。使用它您可以轻松地对代码进行格式化&#xff0c;以满足…

python DevOps

1、用python的 subprocess就能写出ping 255个ip哪个不通。多进程就能快很多&#xff0c;用fork 2、子进程在循环中不写exit(),会发生再生成子进程&#xff0c;核心就是子进程下次循环就少一次&#xff0c;生出孙进程&#xff0c;循环少两次。。。直到结束 windows是没有os.fo…

Mac怎么清理磁盘空间?释放Mac磁盘空间有效方法

相信很多使用macOS系统的小伙伴都收到过提示“磁盘空间已满”消息&#xff0c;尤其是采用SSD固态硬盘的MacBook系列&#xff0c;120G的硬盘空间本就捉襟见肘&#xff0c;使用一段时间后&#xff0c;即使自己没有存放很多大文件&#xff0c; Mac的磁盘很快就满了。那么&#xff…

echarts的柱状图的重叠和堆叠实现两个柱体的显示和之前的差值显示

效果图 主要思路 准备三个柱体&#xff08;原计划&#xff0c;实际进度&#xff0c;差值&#xff09; 原计划和实际进度设置成重叠 {barWidth: 20,// yAxisIndex: 1,z: 1,name: 原计划,type: bar,stack: ab,emphasis: { // 点击柱体其他柱体颜色会变浅disabled: true},label…

山西电力市场日前价格预测【2023-10-27】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-27&#xff09;山西电力市场全天平均日前电价为347.06元/MWh。其中&#xff0c;最高日前电价为618.09元/MWh&#xff0c;预计出现在18: 15。最低日前电价为163.49元/MWh&#xff0c;预计…