SHAOXIAOJ正在加载中...

2601: 封装模拟练习

金币值:2 定数:3 时间限制:1.000 s 内存限制:128 M
正确:4 提交:11 正确率:36.36% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: Java

题目描述

任务描述


本题任务:构造一个类,把对象的属性封装起来,同时提供一些可以被外界访问属性的方法。

相关知识


为了完成本题任务,你需要掌握:1.什么是封装;2.封装的意义;3.实现Java封装的步骤。

什么是封装

封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。

封装的意义

对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有四大好处:
  • 良好的封装能够减少耦合。
  • 类内部的结构可以自由修改。
  • 可以对成员进行更精确的控制。
  • 隐藏信息,实现细节。

    封装把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

    实现Java封装的步骤

    修改属性的可见性来限制对属性的访问(一般限制为private),例如:
    public class Person {
           private String name;
           private int age;
    }
    这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

    对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
    /*
    *封装演示
    */
    public class Person {
        /*
         * 对属性的封装 一个人的姓名、性别和年龄都是这个人的私有属性
         */
        private String name;
        private String sex;
        private int age;
        /*
         * setter()、getter()是该对象对外开放的接口
         */
        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;
        }
    }
    采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

    封装可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码,就可以对成员变量进行更精确的控制。
    public void setAge(int age) {
        if (age > 120) {
            System.out.println("ERROR:error age input...."); // 提示错误信息
        } else {
            this.age = age;
        }
    }
    public String getSexName() {
        if ("0".equals(sex)) {
            sexName = "女";
        } else if ("1".equals(sex)) {
            sexName = "男";
        } else {
            sexName = "人妖";
        }
        return sexName;
    }

    编程要求


    根据提示,在下方Begin-End处补充代码,要求:
  • 声明一个Person类,私有化属性name和age,并将字段封装起来;
  • 在Person类中定义一个talk()方法,打印姓名和年龄信息;
  • 在main方法中声明并实例化一Person对象p,给p中的属性赋值,调用talk()方法打印  我是:张三,今年:18岁。

    测试说明


    见下方样例输入输出.

    测试代码


    请根据提示补全代码.为防止面向答案输出,本题已设置为提交部分代码模式,请注意代码补全提交内容,你只需提交代码补全开始处和代码补全结束处的代码即可,提交全部代码会报CE(编译错误).
  • 测试代码   复制

    public class Main {
    	public static void main(String[] args) {
    		// 声明并实例化一Person对象p
                    Person p = new Person();
    		// 给p中的属性赋值
                    p.setName("张三");  
                    p.setAge(18); 
    		// 调用Person类中的talk()方法
                    p.talk();
    	}
    }
    
    // 在这里定义Person类
    class Person {
    	/********* 代码提交补全开始 *********/
        
    	/********* 代码提交补全结束 *********/
    }

    输出样例    复制

    我是:张三,今年:18岁