面向对象(OOP)

封装(Encapsulation)

封装的概念

封装(encapsulation) 就是把抽象出来的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部, 程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作

封装实现的步骤

  1. 将属性进行私有化(private)[在外界不能直接修改属性]

  2. 提供一个公共的(public) set 方法,用于对属性进行判断和赋值

    public void setXxx(类型 参数名){
        //加入数据验证的业务逻辑
        属性 = 参数名
    }
  3. 提供一个公共的 get 方法,用于获取属性的值

    public XX getXxx(){
        return xx;
    }

继承(Extends)

继承的介绍

继承可以解决代码复用,提高代码的扩展性和维护性。当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法。所有的子类不需要重新声明这些属性和方法,只需要通过 extends 来声明继承父类即可。

继承的基本语法

class 子类 extends 父类{}
//子类自动继承父类的所有属性和方法
//父类又叫超类,基类
//子类又叫派生类

继承的细节

  1. 子类继承了父类的所有属性和方法,非私有属性可以在子类直接访问,私有属性不能在子类直接被访问,需要通过父类提供的公共方法去访问

  2. 子类必须调用父类的构造器去完成父类的初始化

  3. 当创建子类对象时,不管使用子类的哪个构造器,总会默认调用父类的无参构造器。如果父类没有提供无参构造器,则需要在子类的构造器中使用关键字 super 去指定调用父类的哪个构造器去进行父类的初始化

  4. 如果希望指定调用父类的某个构造器,需要显示的调用一下

  5. super 在使用的时候需要放在构造器的第一行

  6. super() 和 this() 都需要放在方法的第一行使用,所以这两个关键字不能同时使用

  7. Java 的所有类的顶级父类都是 Object

  8. 父类构造器不限于直接父类,可以一直追溯至 Object

  9. 因为 Java 的单继承机制,所以子类只能继承一个父类

    class Base{
        private String name = "jack";
        public int age = "18";
        public Base(){}
        public Base(String name){
            this.name = name;
        }
        public Base(int age){
            this.age = age;
        }
        public Base(String name,int age){
            this.name = name;
            this.age = age;
        }
        public String getName(){
            return name;
        }
        public int getAge(){
            return age;
        }
        public void setName(String name){
            this.name = name;
        }
        public void setAge(int age){
            this.age = age;
        }
    }
    class A0 extends Base{
        public A0(String name, int age) {//调用父类的构造器完成父类的初始化
            super(name, age);//super 指定调用父类的带两个参数的构造器
        }
        public void say(){
            Systeam.out.println("this name is"+getName()+" and this age is"+age);
        }
    }

继承返回信息的关系

按照查找关系来返回信息:

  • 首先看子类自己是否拥有该属性

  • 如果子类有这个属性,并且可以访问,则返回信息

  • 如果子类没有这个属性,就看父类有没有,如果有并且可以访问,就返回信息

  • 如果父类没有,按照(3)的规则继续向上查找,直到Object...

  • 不能越级访问,一旦在某一级找到了相应属性但不能访问,那么会直接报错,并不会继续向上查找了

Super

基本介绍

Super 用于子类访问父类的属性、方法、构造器

基本语法以及部分说明

  1. 访问父类的非私有的属性和方法,不能直接访问父类的私有属性以及方法

  2. 访问父类的构造器,只能放在代码块的第一行使用。在子类调用父类的构造器进行初始化时,默认使用 super() 调用父类的无参构造器

多态(Poly)

基本介绍

方法或对象具有多种形态,和 封装、继承,共同组成面向对象的三大特征。多态是建立在封装和继承之上的

多态的部分说明

多态形成的前提:两个对象之间存在继承关系

  1. 一个对象的编译类型和运行类型可以不一致

  2. 编译类型在定义对象时就已经确定了,不能改变

  3. 运行性可以根据需要改变

  4. 编译类型看等号 "=" 左边,运行类型看等号 "="

向上转型部分说明:

  1. 向上转型本质:父类的引用指向子类对象

  2. 基本语法:父类类型 引用名 = new 子类类型()

  3. 特点:编译类型看左边,运行类型看右边。可以调用父类中的所有成员(符合访问权限),不能调用子类中的特定成员。

  4. 调用方法时,按照运行类型开始查找相关方法,按照继承返回信息关系的原则进行查找

向下转型部分说明:

  1. 语法:子类类型 引用名 = (子类类型) 父类引用

  2. 只能强转父类的引用,不能强转父类对象

  3. 要求父类的引用必须指向的当前目标类型对象

  4. 可以调用子类类型中的所有成员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值