面向对象中的三大特征

面向对象——三大特征

文章目录

      • 面向对象——三大特征
          • 1 概述
          • 2.面向对象- 封装
            • 2.1 Java Bean规范实例化对象的要求
            • 2.2 面向对象中的权限修饰符
          • 3.面向对象- 继承
            • 3.1 基本的格式和特征
            • 3.2方法的重写
            • 3.3方法的重载
            • 3.4 abstract 关键字
          • 4.面向对象 - 多态
          • 5.常见的区分
            • 5.1 成员变量和局部变量之间的区别
            • 5.2 对象实例与对象引用有什么不同之处
            • 5.3 抽象类和接口之间的异同点
            • 5.4 构造器是不是能够重写

1 概述
面向对象实际上就是数据的载体,方法的载体,其中最为重要的点是方法的载体,主要使用的是对象中的功能。

封装

​ 封装从字面上的意思理解实际上就是包装的意思,专业点就是信息隐藏,隐藏内部的细节。封装是将一个对象的属性进行私有化,同时提供一些可以被外界访问的属性的方法。

继承

继承是使用自己已经存在的类的定义作为基础建立新类的基础,新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但是不能够选择性地继承父类。

多态

多态:指向子类的父类引用由于向上转型了,它只能够访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该类是不能够进行使用的,尽管是重载的方法。若子类重写了父类的某些方法,在调用这些反方的时候,必须是使用子类中定义的这些方法。

2.面向对象- 封装
2.1 Java Bean规范实例化对象的要求
1. 要求所有成员变量全部 private 私有化修饰

2. 必须提供所有成员变量对应的 getter and setter 方法

3. 必须提供无参数构造方法
构造方法的作用:

	1.【提供数据类型】,构造方法的名称要去必须是类名,JVM 会根据当前构造方法的名称,明确实例化对象一个,计算得到对应所需要的内存空间。
    2.用于初始化类对象成员变量数据内容。
        
        
new1.在内存堆区根据当前数据类型所申请对应的内存空间
     2.申请的内存空间进行数据擦除
        
new + 构造方法 是实例化对象的一种形式,也是最基础的一种形式。 
2.2 面向对象中的权限修饰符
权限修饰符 修饰的范围
public 权限较大
private 私人持有
protected 本类中,同一个包,不同包的子类
friendly 同一个包内的其他的所有的类都能够访问
package 默认的修饰符,只是在本类或者同包
3.面向对象- 继承
3.1 基本的格式和特征
class A extends B {

}
A 类是 B 类的一个子类
B 类是 A 类的唯一父类

1.父类中非私有化成员(成员变量和成员方法)都可以继承给子类使用

2.父类中私有化成员子类无法获取

3.实例化子类对象会默认调用父类的无参数构造方法。父类构造方法是用于继承给子类数据内容对应内存空间初始化操作使用的方法。JVM 设计规则
【先有父,再有子】

3.2方法的重写
子类继承父类方法,父类方法无法满足子类的特征需求,可以进行重写操作。
重写操作要求:
	1. 要求方法声明完全一致,包括 返回值类型,方法名和形式参数列表
	2. 权限修饰符子类权限必须大于等于父类
		父类 public 子类允许 public
		父类 protected 子类允许 public protected
	3. Java 原作者要求,重写方法必须有 @Override 注解
		@Override 是开启重写语法格式严格检查
3.3方法的重载
同一个类,或者同一个接口内
重载方法要求
	1. 方法名必须一致
	2. 方法形式参数列表数据类型必须不同
	3. 返回值类型无限制
	4. 权限修饰符无限制
区分重载方法:
    要是有几个方法有相同的名字,java中如何确定指向,采用的方法是:每个重载的方法都必须是一个独一无二的参数类型列表。甚至能够通过参数的顺序区分这两种方法。
3.4 abstract 关键字

解决的问题 开启强制实现限制。

abstract 关键字修饰的方法有且只有方法声明,要求子类或者实现类完成方法体。

【特征】
	1. abstract 关键字修饰的方法没有方法体
	2. abstract 方法有且只能定义在 abstract 修饰的类内 或者 interface 接口内
	3. 一个非 abstract 类继承 abstract 类或 interface 接口,必须【实现 implement】对应的 abstract 方法
	4. abstract 修饰的类无法实例化对象,假设获取到 abstract 修饰抽象类实例化对象,无法执行有可能存在的没有方法体的 abstract 方法
4.面向对象 - 多态

多态的总结是:

父类的引用数据类型变量指向子孙类变量

接口的引用数据类型变量,实现类对象

  	【重点】多态的实现必要条件:继承、重写、向上转型。
    在多态的过程中不需要存在有继承关系的子类和父类。重写:子类对于父类中的某些方法进行重新定义,在调用这些方法的时候就会调用子类的方法。向上转型:表示的是在多态中需要子类的引用赋值给父类对象,只有这样该引用才能具备技能调用父类的方法和子类的方法。

    多态的分类:编译时多态和动态多态,【编译时多态】是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的函数,通过编译之后会变成两个不同的函数,在运行时谈不上多态。【运行时多态】通过动态的绑定来实现的,也就是我们所说的多态性。

【注意】:编译看左,运行看右
5.常见的区分
5.1 成员变量和局部变量之间的区别
  • 作用域:成员变量对于整个的类都是有效的,局部变量只是对于某一个范围有关。
  • 存储位置:成员变量是随着对象的创建而创建,随着对象的消失而消失,存储在堆内存中。局部变量随着方法的调用,或者语句的执行的过程中才存在,存储在栈内存中,当方法调用完,或者语句结束之后,就会被自动释放
  • 生命周期:成员变量随着方法的创建而存在,随着消失而消失。当方法调用结束之后,或者语句结束后,就会自动释放。
  • 初始值:成员变量:有默认的初始值。局部变量是:没有默认的初始值操作,使用之前必须进行赋值操作。
5.2 对象实例与对象引用有什么不同之处
new关键字,创建对象实例,对象实例在堆内存中,对象引用是指向对象实例,存放在栈内存中,一个对象引用可以指向0或者1个对象。一个对象可以有n个引用指向它。
5.3 抽象类和接口之间的异同点
  • 相同点
    • 接口和抽象类都不能够进行实例化操作
    • 都是位于继承的顶端,用于被其他实现或者继承
    • 都包含抽象方法,其子类都必须复写这些抽象方法(除非是一个抽象类继承一个抽象类)
  • 不同之处
    • 声明方法不同、实现不同(抽象类是通过继承来实现的,接口则是通过子类实现接口)
    • 构造器,抽象类有构造器,接口不能够拥有构造器
    • 接口能够存在多个类继承实现,但是抽象类只能有一个类继承。
    • 抽象类的字段的声明是可以任意的,但是接口的字段默认是static和final的
5.4 构造器是不是能够重写
构造器不能够被继承,所以是不能够被重写的,但是构造器通过实现不同参数的初始化,能够实现重载操作

你可能感兴趣的:(java,java,开发语言)