面向对象---封装、继承和多态

面向对象的精髓

(一)封装

概念

  • 通常情况下可以在测试类给成员变量赋值一些合法但不合理的数值,无论是编译阶段还是运行阶段都不会报错或者给出提示,此时与现实生活不符。

  • 为了避免上述错误的发生,需要对成员变量进行密封包装处理,来隐藏成员变量的细节 以及保证成员变量数值的合理性,该机制就叫做 封装

    • 封装就是私有化成员变量,提供公有的get、set方法进行访问
    • 特征的访问就是通过 get 和 set 开头的方法

实现流程

  1. 私有化成员变量,使用 private 关键字进行修饰
    • private 表示私有的含义,也就是该成员变量只能在当前类的内部使用
  2. 提供公有的 getset 方法,并在方法体中进行合理值的判断
    • 使用public关键字修饰 表示公有的含义,也就是该方法可以在任意位置使用
  3. 在公有的构造方法中调用set方法进行合理值的判断,可选
  • 什么修饰符都没有时为默认的访问权限,级别介于 privatepublic 之间

实践出真理

1.Student类的封装与测试
//实现student类的   封装类
public class Student {
   
    //私有化成员变量
    private int id;
    //提供公有的方法 get set
    public int getId() {
   
        return id;
    }
    public void setId(int id) {
   
        //对变量修改时进行合理值的判断
        if (id > 0) {
   
            this.id = id;
        } else {
   
            System.out.println("提供的学号不合理");
        }
    }
    private String name;
    public String getName() {
   
        return name;
    }
    public void setName(String name) {
   
        this.name = name;
    }
    //无参构造方法
    public Student() {
   
    }
    //有参构造方法
    public Student(int id, String name) {
   
        setId(id);
        setName(name);
    }

    public void show() {
   
        System.out.println("我是:" + getName() + ",\t我的学号是:" + getId());
    }
}

//student类的   测试类
public class StudentTest{
   
    public static void main(String[] args){
   
        Student s = new Student();

        s.setId(1002);
        s.setName("张三");
        s.show();

        Student s1 = new Student(52, "李四");
        s1.setId(-5263);        //提供的学号不合理
        s1.show();
    }
}

运行结果:

2.班级中学生的信息
  • 学生的信息有: 学号、姓名
  • 分别打印学生的信息
public class StudentMain{
   
    public static void main(String[] args){
   
        System.out.println("请输入班级的学生人数");
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        Student[] arr = new Student[num];

        for (int i = 0; i < num; i++) {
   
            System.out.println("请输入第 " + i + "\t个学生的信息:学号+姓名");
            arr[i] = new Student(sc.nextInt(), sc.next());
        }
        for (int j = 0; j < arr.length; j++) {
   
            arr[j].show();
        }
    }
}

运行结果:

3.People类的封装与测试
  • people的特征:姓名、年龄、国籍,要求提供打印所有特征的方法
//封装People类
public class People {
   
    //姓名
    private String name;

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    //年龄
    private int age;

    public int getAge() {
   
        return age;
    }

    public void setAge(int age) {
   
        if (0 < age && 120 > age) {
   
            this.age = age;
        } else {
   
            System.out.println("输入的年龄无效");
        }
    }

    //国籍
    private String nationality;

    public String getNationality() {
   
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

地三千

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

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

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

打赏作者

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

抵扣说明:

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

余额充值