太原理工大学java实验报告-实验二

本文讲述了Java面向对象实验,涉及抽象类Pet和其子类Dog、Cat的设计,以及如何运用封装、继承和多态。实验内容包括创建抽象类,定义构造函数、抽象方法,实例化子类并调用特有方法。同时强调了理解和应用面向对象的关键概念以及static和final关键字的使用。
摘要由CSDN通过智能技术生成

实验项目名称 

实验2  Java面向对象程序设计

实验目的和要求

  1. 熟练运用Java语言进行面向对象程序设计;
  2. 深入理解面向对象的封装、继承和多态等特性,掌握类、继承、包和接口的应用;
  3. 能熟练应用方法、类、成员变量等元素;
  4. 了解并掌握抽象类和接口概念和定义;
  5. 掌握关键字static和final的使用;

实验内容

  1. 编写应用程序,具体要求如下:
  • 声明一个抽象类Pet,封装属性namesex,声明一个带有两个参数的构造函数,声明抽象方法void talk()void eat()
  • 声明一个Dog类继承自Pet,封装属性color,声明带有三个参数的构造函数,复写talk()eat()方法;
  • 声明一个Cat类继承自Pet,封装属性weight,声明带有三个参数的构造函数,复写talk()eat()方法;
  • 编写测试类,通过有参构造函数实例化Dog类对象,调用talk()方法和eat()方法;通过有参构造函数实例化Cat类对象,调用talk()方法和eat()方法;
  1. 按照要求编写一个Java应用程序:
  • 定义一个抽象类Person,包含抽象方法eat(),封装属性namesexage,声明包含三个参数的构造方法;
  • 定义一个Chinese类,继承自Person类,重写父类的eat()方法,并定义一个自己特有的方法shadowBoxing()
  • 定义一个English类,继承自Person类,重写父类的eat()方法,并定义一个自己特有的方法horseRiding()
  • 编写测试类,定义一个showEat()方法,使用父类作为方法的形参,实现多态,分别调用showEat()方法,通过强制类型转换调用各自类特有的方法;

主要仪器设备

台式或笔记本电脑

实验记录(写出实验内容中1、2的程序代码和运行结果)(可分栏或加页)

1、第一题代码如下:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

                Scanner sc = new Scanner(System.in);

                String dogName = sc.next();

                String dogSex = sc.next();

                String dogColor = sc.next();

                String catName = sc.next();

                String catSex = sc.next();

                double catWeight = sc.nextDouble();

                Dog dog = new Dog(dogName, dogSex, dogColor);

                dog.talk();

                dog.eat();

                Cat cat = new Cat(catName, catSex, catWeight);

                cat.talk();

                cat.eat();

            }

        }

        abstract class Pet {

            private String name;

            private String sex;

            public String getName() {

                return name;

            }

            public void setName(String name) {

                this.name = name;

            }

            public String getSex() {

                return sex;

            }

            public void setSex(String sex) {

                this.sex = sex;

            }

            public Pet(String name, String sex) {

                this.name = name;

                this.sex = sex;

            }

            public abstract void talk();

            public abstract void eat();

        }

        class Dog extends Pet {

            private String color;

            public String getColor() {

                return color;

            }

            public void setColor(String color) {

                this.color = color;

            }

            public Dog(String name, String sex, String color) {

                super(name, sex);

                this.color = color;

            }

            public void talk() {

                System.out.println("名称:" + this.getName() + ",性别:" + this.getSex()

                        + ",颜色:" + this.getColor() + ",汪汪叫");

            }

            public void eat() {

                System.out.println(this.getName() + "吃骨头!");

            }

        }

        class Cat extends Pet {

            private double weight;

            public double getWeight() {

                return weight;

            }

            public void setWeight(double weight) {

                this.weight = weight;

            }

            public Cat(String name, String sex, double weight) {

                super(name, sex);

                this.weight = weight;

            }

            public void talk() {

                System.out.println("名称:" + this.getName() + ",性别:" + this.getSex()

                        + ",体重:" + this.getWeight() + "kg" + ",喵喵叫");

            }

            public void eat() {

                System.out.println(this.getName() + "吃鱼!");

            }

        }

实验内容一运行结果:

2、第题代码如下:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

                Scanner sc = new Scanner(System.in);

                String cName = sc.next();

                String cSex = sc.next();

                int cAge = sc.nextInt();

                String eName = sc.next();

                String eSex = sc.next();

                int eAge = sc.nextInt();

                Main test = new Main();

                Person person1 = new Chinese(cName, cSex, cAge);

                test.showEat(person1);

                Person person2 = new English(eName, eSex, eAge);

                test.showEat(person2);

                Chinese chinese = (Chinese) person1;

                chinese.shadowBoxing();

                English english = (English) person2;

                english.horseRiding();

            }

            public void showEat(Person person){

                person.eat();

            }

        }

        abstract class Person {

            private String name;

            private String sex;

            private int age;

            public String getName() {

                return name;

            }

            public void setName(String name) {

                this.name = name;

            }

            public String getSex() {

                return sex;

            }

            public void setSex(String sex) {

                this.sex = sex;

            }

            public int getAge() {

                return age;

            }

            public void setAge(int age) {

                this.age = age;

            }

            public Person(String name, String sex, int age) {

                this.name = name;

                this.sex = sex;

                this.age = age;

            }

            public abstract void eat();

        }

        class Chinese extends Person {

            public Chinese(String name, String sex, int age) {

                super(name, sex, age);

            }

            public void eat() {

                System.out.println("姓名:" + this.getName() + ",性别:" + this.getSex()

                        + ",年龄:" + this.getAge() + ",我是中国人,我喜欢吃饭!");

            }

            public void shadowBoxing() {

                System.out.println(this.getName() + "在练习太极拳!");

            }

        }

        class English extends Person {

            public English(String name, String sex, int age) {

                super(name, sex, age);

            }

            public void eat() {

                System.out.println("姓名:" + this.getName() + ",性别:" + this.getSex()

                        + ",年龄:" + this.getAge() + ",我是英国人,我喜欢吃三明治!");

            }

            public void horseRiding() {

                System.out.println(this.getName() + "在练习骑马!");

            }

        }

实验内容二运行结果:

 

遇到的问题和解决方法

1、问题:面向对象编程的概念(如封装、继承、多态等)理解困难,难以将这些概念具体应用到实际编程中。

解决方法:通过阅读相关教材、观看视频教程,尝试通过实际例子理解这些概念。可以编写简单的代码示例,比如创建类、继承、方法重写等,以加深理解。

2、问题:对于抽象类和接口的定义、使用不够熟练,难以区分它们的适用场景。

解决方法:深入理解抽象类和接口的概念,分析它们的区别和作用。尝试编写简单的例子,比较它们的使用场景和特点,实际应用中的优缺点。

3、问题:对于static和final关键字的使用场景和作用理解不够清晰,可能出现误用或未充分利用的情况。

解决方法:仔细研究和理解static和final的含义和用法。静态变量、方法、块和final变量、方法、类的特性需要深入了解,并逐步在实际项目中应用。

4、问题:在设计类时,可能遇到封装不够严密、设计不合理的情况,导致代码复杂或不易维护。

解决方法:学习良好的封装习惯,保证类的私有成员仅在需要的情况下暴露,采用合理的访问控制。通过重构代码、优化设计,提高代码的可读性和可维护性。

心得体会

首先,熟练运用Java语言进行面向对象程序设计是构建复杂程序的基础。通过掌握类、对象、方法等基本概念,我能够更清晰地组织和设计程序结构,使得程序更易读、易维护。

其次,深入理解面向对象的封装、继承和多态等特性对于设计高质量的程序至关重要。封装提高了代码的安全性和可靠性,继承提高了代码的复用性和可扩展性,而多态使得程序更灵活、更易于扩展。我学会了如何正确地应用这些特性来提高程序的质量和效率。

第三,熟练掌握类、继承、包和接口的应用是编写优秀Java程序的关键。正确使用类的构造方法、成员变量、成员方法等元素,合理划分类和包的结构,设计良好的接口使得程序更具扩展性和灵活性。

其次,抽象类和接口是面向对象编程中的重要概念。通过学习和实践,我理解了抽象类和接口的概念,并学会了如何正确地定义和应用它们,使得程序更具可拓展性和适应性。

最后,关键字static和final在Java中的应用也是非常重要的。static关键字用于定义类方法和变量,final关键字用于定义不可修改的常量或方法、类等。我学会了如何正确使用这些关键字来满足程序的需求,提高程序的效率和安全性。

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值