实验三: 面向对象(二)

  • 实验目的

在集成开发环境下,实现类的继承及多态,实现抽象类、接口的定义,根据实际问题,运用抽象方法、接口及抽象类进行程序开发。

  • 实验目标

(1)能够运用Java语言来实现类的继承及多态性、熟练使用包来扩展程序功能并能建立自己的包;

(2)能够灵活运用Java语言的抽象方法、接口、抽象类来编写应用程序解决实际问题。

  • 实验内容

1 实验环境

java version "11.0.12" 2021-07-20 LTS

Java(TM) SE Runtime Environment 18.9 (build 11.0.12+8-LTS-237)

Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.12+8-LTS-237, mixed mode)

2 具体实验内容

  1. 设计一个抽象类图形类,在该类中包含有至少三个抽象方法,分别用于求周长、求面积,以及对图形进行描述(如,“这是**形状,周长是**,面积是**”),分别定义圆形类、长方形类、等边三角形类来继承图形类,实现上述三个方法,并创建实例验证。
  2. 定义一个抽象接口,该接口用于求和与统计数量。定义两个奇数类与偶数类实现上述接口,分别可以求100以内的奇数的和,统计100以内的奇数个数,以及求100以内的偶数的和,统计100以内的偶数个数。
  3. 定义一个抽象类动物类,同时定义抽象接口:进食接口、睡觉接口、思考接口、说话接口、行走接口、游泳接口、飞翔的接口。分别定义猫类、人类、鸟类、鱼类继承动物类,同时,根据实际情况,选择性实现上述接口,并创建实例验证。
  4. 编写一个类,实现银行账户,并完成程序的测试:
  1. 设置的属性有“账号”、 “储户姓名”、“地址”以及“存款余额”;
  2. 设置的方法有“存款”、“取款”、“查询”、“计算利息”、“累加利息”;
  3. 给类增加一个静态属性“最小余额”和一个用来修改这个最小余额属性的方法;
  4. 给类增加一个静态属性“活期利息”和封装这个数据的对应方法;

  • 实验过程分析
    1. 实验步骤

图形抽象类,首先创建一个公共的类,其中定义所有的图形的抽象方法,再创建长方形、正方形和圆形等图形继承这个类。代码如下:

package demo;

public class Main {

    public static void main(String[] args) {

        circle circle = new circle(3.5);

        circle.describe();

        shape shape = new shape(2.2, 3.5);

        shape.describe();

        triangle triangle = new triangle(5.5);

        triangle.describe();

    }

}

class circle extends type {

    private Double r;

    public circle(Double r) {

        this.r = r;

    }

    @Override

    Double c() {

        return 2 * 3.14 * this.r;

    }

    @Override

    Double s() {

        return 3.14 * this.r * this.r;

    }

    @Override

    void describe() {

        System.out.println("这个图形是圆形,周长是" + c() + ",面积是" + s());

    }

}

class shape extends type {

    private double x;

    private double y;

    public shape(double x, double y) {

        this.x = x;

        this.y = y;

    }

    @Override

    Double c() {

        return 2 * (this.x + this.y);

    }



    @Override

    Double s() {

        return x * y;

    }

    @Override

    void describe() {

        System.out.println("这个图形是长方形,周长是" + c() + ",面积是" + s());

    }

}

class triangle extends type {

    private Double length;

    public triangle(Double length) {

        this.length = length;

    }

    @Override

    Double c() {

        return 3 * this.length;

    }

    @Override

    Double s() {

        return this.length / 2 * (double) Math.sqrt(3) / 2 * this.length;

    }

    @Override

    void describe() {

        System.out.println("这个图形是等边三角形,周长是" + c() + ",面积是" + s());

    }

}

/**

 * c代表周长,s代表面积

 */

abstract class type {

    abstract Double c();

    abstract Double s();

    abstract void describe();

}

统计和计数,定义这个类,其中包含两个方法,分别是偶数和奇数集合,再写两个类,一个数偶数类,一个奇数类,分别实现其中的一个方法,抽象类不必全部继承方法。

代码如下:

package demo;



public class Main {

    public static void main(String[] args) {

        even even = new even();

        odd odd = new odd();

        System.out.println("100以内的偶数和是"+even.sum()+",偶数个数是"+even.count());

        System.out.println("100以内的奇数和是"+odd.sum()+",奇数个数是"+odd.count());

    }

}

class even extends sumAndcount {

    @Override

    int sum() {

        int sum = 0;

        for (int i = 2; i <= 100; i += 2) {

            sum += i;

        }

        return sum;

    }

    @Override

    int count() {

        int sum = 0;

        for (int i = 2; i <= 100; i += 2) {

            sum++;

        }

        return sum;

    }

}

class odd extends sumAndcount {



    @Override

    int sum() {

        int sum = 0;

        for (int i = 1; i <= 100; i += 2) {

            sum += i;

        }

        return sum;

    }

    @Override

    int count() {

        int sum = 0;

        for (int i = 1; i <= 100; i += 2) {

            sum++;

        }

        return sum;

    }

}

abstract class sumAndcount {

    abstract int sum();



abstract int count();

      }

动物抽象方法,先创建一个公共的动物类,在里面写上抽象方法,再写几个需求的类,将这些类继承这个公共类,选择继承其中的类方法。

代码如下:

package demo;



public class Main {

    public static void main(String[] args) {

        cat cat = new cat("一号");

        people people = new people("二号");

        bird bird = new bird("三号");

        fish fish = new fish("四号");

        cat.eat();

        people.sleep();

        bird.fly();

        fish.swimming();

    }

}

class cat extends animal {

    private String name;



    public cat(String name) {

        this.name = name;

    }

    @Override

    void eat() {

        System.out.println("猫" + this.name + "正在吃饭");

    }

    @Override

    void sleep() {

        System.out.println("猫" + this.name + "正在睡觉");

    }

    @Override

    void want() {

        System.out.println("猫" + this.name + "正在思考");

    }

    @Override

    void speak() {

        System.out.println("猫" + this.name + "正在说话");

    }

    @Override

    void walk() {

        System.out.println("猫" + this.name + "正在行走");

    }

    @Override

    void swimming() {

        System.out.println("猫" + this.name + "正在游泳");

    }

    @Override

    void fly() {

    }

}

class people extends animal {

    private String name;

    public people(String name) {

        this.name = name;

    }



    @Override

    void eat() {

        System.out.println("人" + this.name + "正在吃饭");

    }

    @Override

    void sleep() {

        System.out.println("人" + this.name + "正在睡觉");

    }

    @Override

    void want() {

        System.out.println("人" + this.name + "正在思考");

    }

    @Override

    void speak() {

        System.out.println("人" + this.name + "正在说话");

    }

    @Override

    void walk() {

        System.out.println("人" + this.name + "正在行走");

    }

    @Override

    void swimming() {

        System.out.println("人" + this.name + "正在游泳");

    }

    @Override

    void fly() {

    }

}

class bird extends animal {

    private String name;

    public bird(String name) {

        this.name = name;

    }

    @Override

    void eat() {

        System.out.println("鸟" + this.name + "正在吃饭");

    }

    @Override

    void sleep() {

        System.out.println("鸟" + this.name + "正在睡觉");

    }

    @Override

    void want() {

        System.out.println("鸟" + this.name + "正在思考");

    }

    @Override

    void speak() {

        System.out.println("鸟" + this.name + "正在说话");

    }

    @Override

    void walk() {

        System.out.println("鸟" + this.name + "正在行走");

    }

    @Override

    void swimming() {

    }

    @Override

    void fly() {

        System.out.println("鸟" + this.name + "正在飞翔");

    }

}

class fish extends animal {

    private String name;

    public fish(String name) {

        this.name = name;

    }

    @Override

    void eat() {

        System.out.println("鱼" + this.name + "正在吃饭");

    }

    @Override

    void sleep() {

        System.out.println("鱼" + this.name + "正在睡觉");

    }

    @Override

    void want() {

        System.out.println("鱼" + this.name + "正在思考");

    }

    @Override

    void speak() {

        System.out.println("鱼" + this.name + "正在说话");

    }

    @Override

    void walk() {

    }

    @Override

    void swimming() {

        System.out.println("鱼" + this.name + "正在游泳");

    }

    @Override

    void fly() {

    }

}

/**

 * 进食接口、睡觉接口、思考接口、

 * 说话接口、行走接口、游泳接口、飞翔的接口

 */

abstract class animal {

    abstract void eat();

    abstract void sleep();

    abstract void want();

    abstract void speak();

    abstract void walk();

    abstract void swimming();

    abstract void fly();

}

银行存钱,创建一个银行方法,在这个方法中写上需求的几个方法。

代码如下:

package demo;

import java.util.Scanner;

import java.util.Vector;



public class Main {

    public static void main(String[] args) {

        bank bank1 = new bank("110", "龙", "四川", 1000000000000.5, 2);

        bank1.showMoney();

        bank1.saveMoney(463812.32);

        bank1.getMoney(4132.4);

        bank1.showPoint();

        bank1.showAddpoint();

        bank.smallMoney();

    }

}



/**

 * bank测试,设置的属性有“账号”、 “储户姓名”、“地址”以及“存款余额”;

 */

class bank {

    public bank(String sno, String sname, String address, Double money, int year) {

        this.sno = sno;

        this.sname = sname;

        this.address = address;

        this.money = money;

        this.year = year;

    }

    private static Integer small;

    private static Double huoMoney;

    private String sno;

    private String sname;

    private String address;

    private Double money;

    private int year;

    private static double point;

    public void saveMoney(Double money) {

        Scanner scanner = new Scanner(System.in);

        this.money = this.money + money;

        System.out.println("你要存几年: ");

        this.year = scanner.nextInt();

        System.out.println("你存入" + money + "元,账户余额" + this.money + "元");

    }



    public void getMoney(Double money) {

        if (money <= 0 || this.money < money) {

            System.out.println("你的账户余额不足");

        } else {

            this.money -= money;

            System.out.println("你取出" + money + "元,账户余额" + this.money + "元");

        }

    }



    public void showMoney() {

        System.out.println("账户余额" + this.money);

    }



    public void showPoint() {

        this.point = 0.1;

        System.out.println("你的利息为" + this.money * (this.point) * this.year);

    }



    public void showAddpoint() {

        this.point = 0.2;

        System.out.println("你的累加利息为" + this.money * (this.point + 1));

    }



    public static void smallMoney() {

        small = 10000;

        System.out.println("本银行最少存钱为:" + small);

    }



    public void setHuoMoney() {

        this.point = 0.1;

        huoMoney = this.money * point;

        System.out.println(huoMoney);

    }

}

    1. 错误分析

静态方法和实例方法的问题

Java中的静态方法是指被static 修饰的方法。

1、静态方法:可以直接通过类名.方法名访问。(有静态方法的类,必须声明为静态类)非静态方法:需要通过创建对象来访问方法。

2、静态方法:只可以访问静态成员(静态变量和静态方法)。非静态方法:既可以访问实例也可以访问静态。

3、静态方法和静态类是随着类的加载而加载的。并且只加载一次。

4、静态方法可以直接调用,类名调用和对象调用。(类名.方法名 / 对象名.方法名)但是非静态方法只能通过对象调用。(对象名.方法名)

  • 实验总结

答:静态方法和非静态方法的总结

1.静态方法 静态方法又称类方法,是加staic关键字修饰的方法,在类定义的时候就被分配和装载入内存中。 静态方法属于类所有,类实例化前即可使用,同时不能使用super和this关键字。 静态方法只能调用静态方法以及访问静态...

2.非静态方法 非静态方法,又称为实例方法、成员方法,是不加staic关键字修饰的方法,在类定义时不菲配内存,只有在类被实例化为对象后,对象调用该方法时才被分配内存,因此非静态方法属于对象,不属于类。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
面向对象技术在图书管理系统中的应用开题报告 摘要: 随着计算机技术的不断发展,图书管理系统已经成为图书馆管理的重要工具。面向对象技术是一种现代的软件开发方法,它可以提高软件的可重用性、可维护性和可扩展性。本文将探讨面向对象技术在图书管理系统中的应用,包括面向对象的分析和设计面向对象的编程和面向对象的测试等方面。 关键词:面向对象技术;图书管理系统;分析和设计;编程;测试 一、研究背景和意义 随着信息技术的快速发展,图书馆管理已经从传统的手工管理向数字化管理转变。图书管理系统已经成为图书馆管理的重要工具。图书管理系统可以帮助图书馆实现图书的管理、借阅、归还、查询等功能,提高图书馆的管理效率和服务质量。 面向对象技术是一种现代的软件开发方法,它可以提高软件的可重用性、可维护性和可扩展性。面向对象技术将程序看作是一组对象的集合,每个对象都有自己的属性和方法面向对象技术可以将程序分解成多个独立的对象,每个对象都可以独立地进行设计、编程和测试。面向对象技术可以提高软件的可重用性,因为每个对象都可以被多个程序共享;可以提高软件的可维护性,因为每个对象都可以独立地进行修改和测试;可以提高软件的可扩展性,因为每个对象都可以独立地进行扩展和修改。 因此,本文将探讨面向对象技术在图书管理系统中的应用,以提高图书管理系统的可重用性、可维护性和可扩展性。 、研究内容和方法 本文将探讨面向对象技术在图书管理系统中的应用,包括面向对象的分析和设计面向对象的编程和面向对象的测试等方面。 1. 面向对象的分析和设计 面向对象的分析和设计是图书管理系统开发的重要环节。本文将介绍面向对象的分析和设计方法,包括用例图、类图、时序图等。 2. 面向对象的编程 面向对象的编程是图书管理系统开发的核心环节。本文将介绍面向对象的编程方法,包括类的定义、对象的创建、方法的调用等。 3. 面向对象的测试 面向对象的测试是图书管理系统开发的关键环节。本文将介绍面向对象的测试方法,包括单元测试、集成测试、系统测试等。 本文将采用文献资料法、实证研究法和案例分析法等方法进行研究。 三、预期成果和意义 本文将探讨面向对象技术在图书管理系统中的应用,以提高图书管理系统的可重用性、可维护性和可扩展性。本文的预期成果包括: 1. 提出面向对象技术在图书管理系统中的应用方法,包括面向对象的分析和设计面向对象的编程和面向对象的测试等方面。 2. 设计并实现一个基于面向对象技术的图书管理系统原型,验证面向对象技术在图书管理系统中的应用效果。 本文的意义在于: 1. 探讨面向对象技术在图书管理系统中的应用,可以提高图书管理系统的可重用性、可维护性和可扩展性,为图书馆管理提供更好的服务。 2. 设计并实现一个基于面向对象技术的图书管理系统原型,可以为其他图书管理系统的开发提供参考和借鉴。 四、研究进度安排 本文的研究进度安排如下: 1. 第一阶段(2021年11月-2022年1月):文献资料收集和分析。 2. 第阶段(2022年2月-2022年4月):面向对象的分析和设计。 3. 第三阶段(2022年5月-2022年7月):面向对象的编程。 4. 第四阶段(2022年8月-2022年10月):面向对象的测试和实验验证。 5. 第五阶段(2022年11月-2023年1月):撰写论文和答辩准备。 五、参考文献 [1] 张三. 面向对象技术在图书管理系统中的应用[J]. 计算机应用, 202, 40(10): 1-5. [2] 李四. 面向对象技术在图书管理系统中的设计与实现[D]. 北京: 北京大学, 2019. [3] 王五. 面向对象技术在图书管理系统中的应用研究[J]. 图书馆学

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个学编程的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值