Java中面向对象封装、继承(2022.4.23)

封装(private)

  • 所谓封装就是把属性私有化,如:我在Cat这个类中定义了一个属性name,注意这个name只能在Cat这个类中进行使用。
  • 通俗一点就是:该露的露,该藏的藏
    • 我们程序设计要求"高内聚,低耦合";
    • 高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉;
    • 低耦合:仅暴露少量的方法给外部使用。
  • 封装(数据的隐藏)
    • 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息的隐藏。
  • 记住这就话就够了:属性私有,get/set

代码实现:

    package com.oop2;
    
    /**
     * 封装的作用:
     *  1、提高程序的安全性
     *  2、隐藏代码的实现细节
     *  3、统一接口
     *  4、提高系统的维护
     */
    // 启动类
    public class Application {
        public static void main(String[] args) {
            Student student = new Student();
            student.setName("张三");
            System.out.println(student.getName());
            student.setAge(-1);
            System.out.println(student.getAge());
        }
    }
    // 学生类
    package com.oop2;
    public class Student {
        // 属性私有化
        private String name;
        private int id;
        private char sex;
        private int age;
    // 提供一些可以操作这些属性的方法
        // 提供一些 public 的 get/set 方法
        // get:获取数据
        // set:给数据设置值
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public char getSex() {
            return sex;
        }
        public void setSex(char sex) {
            this.sex = sex;
        }
        public int getAge() {
            return age;
        }
        // 利用set方法设置年龄的规范性
        public void setAge(int age) {
            if (age<0||age>150){
                this.age = 2;
            }else {
                this.age = age;
            }
        }
    }
    输出:
    	张三
    	2    // 这个就是操作属性后所输出的值,可以大大的提高代码的安全性,不能随便操作...

解析:private一般会用在类中的属性前面,不能让其他类直接操作该类的属性;必须要通过该类中的get/set方法去操作该类的属性,并且还能在该类的属性中使用set方法可以给属性设置一些安全隐患;就如上述代码,人的年龄不可能小于0岁或者超过150(极其少见),所以咱们就判断一下,如果传入的值小于0或者大于150那就给他传入2,如果不在这个范围之内就可以正常传参。

2、继承(extends)

  • 继承的本质就是对某一批类的抽象,从而实对显示世界更好的建模(父子).
  • 关键字为 extends :意思是"扩展",子类是父类的扩展。
  • Java中只有单继承,没有多继承。
  • 继承是类和类之间的一种关系;除此之外,类和类之间的关系还有依赖、组合、聚合等…
  • 继承关系的两个类,一个为父类(基类);子类继承父类,使用关键字extends来表示。
  • 子类和父类之间,从意义上讲应该具有"is a"的关系。
  • Java中所有的类统一都有一个总父类,就是Object.
    代码实现:
    package com.oop3;
    /*
        继承:extend 
     */
    // 父类
    public class Person {
        // 一旦子类继承父类后,父类的所有属性以及属性子类都可使用
      private  int money = 1_000_000_000;   // 父类属性私有化之后就要使用get/set方法进行调用
        // 父类方法
        public void sleep(){
            System.out.println("键盘敲烂,工资过万!");
        }
    
        public int getMoney() {
            return money;
        }
    
        public void setMoney(int money) {
            this.money = money;
        }
    }
    
    package com.oop3;
    // 学生类去继承父类
    public class Student extends Person{
    }
    
    // 老师类也去继承父类
    package com.oop3;
    public class Teacher extends Person{
    }
    package com.oop3;
    
public class Teacher extends Person{
}
package com.oop3;

/*
 * 测试类,用来专门测试继承
 */
public class Application {
    public static void main(String[] args) {
        Person p = new Person();
        p.sleep();
        p.setMoney(123);
        System.out.println(p.getMoney());
        Teacher t = new Teacher();
        t.sleep();
        t.setMoney(111);
        System.out.println(t.getMoney());
    }
}
输出:
      键盘敲烂,工资过万!
      123
      键盘敲烂,工资过万!
      111

注意:可以看到父类中有一个变量int已经赋值了,但是在输出的时候只要使用set进行设置值时,就会把之前的值个覆盖掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值