Java面对对象

面对对象

概念

面对

  • 基本意:面对、朝向
  • 引申义:注重、关注

对象

  • 世间一切的事物

面对对象思想特点

  • 是一种更符合人们思考习惯的思想
  • 把复杂的事情简单化
  • 把人们从执行者变成了指挥者

类的定义与使用

成员变量与局部变量的区别

定义位置
  • 成员变量:类中,方法外
  • 局部变量:方法中,或形参
初始化值
  • 成员变量:有默认初始化值
  • 局部变量:无默认初始化值,必须先赋值再使用
作用范围
  • 成员变量:在类中
  • 局部变量:在方法中
内存中的位置
  • 成员变量:堆内存
  • 局部变量:栈内存
生命周期
  • 成员变量:随着对象的创建而存在,随着对象的消失而消失
  • 局部变量:随着方法的调用而存在,随着方法调用完毕而消失
注意事项
  • 局部变量和成员变量重名时,采用就近原则

封装

封装好处

  • 提高安全性
  • 提高复用性
  • 将复杂的事情简单化

体现封装

  • 方法或类
    • 安全性:不知道具体实现
    • 复用性:可以反复使用
    • 简单化:实现了很多功能,提高代码的维护性

private

  • 特点:别修饰的成员只在本类中被访问
  • 用法:
    • private 数据类型 变量名
    • private 返回值类型 方法名(参数列表){}

this

  • 概念:引用本类对象

  • 特点:每一个普通的方法都有一个this,谁调用该方法,this就只向谁

  • 用法:

    • this 属性名
    • this 方法名(参数)

构造方法

要求
  • 方法必须与类名相同
  • 没有返回值
  • 没有返回类型
注意事项
  • 没提供构造方法,默认给出无参构造
  • 提供构造方法,不默认给无参构造
  • 构造方法可以重载

继承

基本概念

  • 让类与类之间产生父子关系
  • 让子类继承父类的非私有成员(成员变量,成员方法)

特点

  • 单继承
    • Java只支持类的单继承,但支持多层继承
    • Java支持接口的多继承,语法为
      • 接口A extends 接口B,接口C,接口D
  • 私有成员不能继承
  • 构造方法不能被继承
    • 构造方法用于初始化本类对象
    • 创建子类对象时,需要调用父类构造初始化
    • 该对象的父类内容,若父类构造可以被继承,该操作会造成调用混乱
    • 继承体现了“is a” 的关系
      • 子类符合“is a(是一个)”父类的情况下,才使用继承,其他情况不建议使用

继承的好处

  • 功能复用
  • 便于扩展功能
  • 结构清晰,简化认识
  • 易维护性

继承的缺点

  • 打破了封装性
  • 高耦合性

ps:程序设计的追求:低耦合,高内聚

  • 耦合:两个或多个模块相互依赖于对方
  • 内聚:模块内部结构紧密,独立性强

子父类的成员变量调用

  • this.变量名:调用本类对象
  • super.变量名:调用父类对象

this

  • 本质:对象
  • 从本类之中开始找

super

  • 本质:父类内存空间的标识
  • 从父类之中开始找

继承中类成员的使用

  • 创建子类对象时,优先父类构造方法
  • 子类构造方法的第一行,隐含语句super(),用于调用父类默认的无参构造
  • 因为默认有一个super()访问父,因此会优先访问父类的无参构造

方法重写

定义

  • 子类中出现和父类方法定义相同的方法现象

要求

  • 方法名,参数列表,返回值类型都相同

注意

  • 父类的私有方法无法重写
  • 子类方法访问权限不能小于父类方法
  • 子类不能比父类方法抛出更大的异常

重载和重写的区别

重载

  • 方法名:相同
  • 参数列表:不同(个数或对应位置类型)
  • 返回值类型:无关
  • 修饰符:无关
  • 定义位置:同一个类

重写

  • 方法名:相同
  • 参数列表:相同
  • 返回值类型:相同
  • 修饰符:访问权限不小于被重写方法
  • 定义位置:子父类中

访问权限修饰符

  • private:本类
  • default(默认):本类,本包
  • protected:本类,本包,子类
  • public:本类,本包,子类,其他类

多态

概述

  • 多种状态,同一对象在不同情况下表现出不同的状态或行为

要求

  1. 要有继承(或实现 )关系
  2. 要有方法重写
  3. 父类引用指向子类对象(is a 关系)

Ps:成员变量,遵循“编译看左,运行看左”

好处弊端

  • 可维护性
  • 可扩展性
  • 父类不能使用子类特有成员
    • 类型转型可以使用
      • 向上转型(自动类型转换)
        • 子类型转换成父类型
        • Animal animal = new Dog()
      • 向下转型(强制类型转换)
        • 父类型转换成子类型
        • Dog dog = (Dog)animal
      • Ps:
        • 只能在继承层次内进行转换
        • 将父类对象转换成子类之前,使用instanceof进行检查

抽象类和抽象方法

抽象类概念
  • 包含抽象方法的类,用abstract修饰
抽象方法概念
  • 只有方法声明,没有方法体的方法,用abstract修饰
特点
  • 必须用abstract修饰
  • 不能被实例化
  • 抽象类子类只有两种方法
    • 重写父类所有抽象方法
    • 定义成抽象类
抽象类的成员特点
成员变量
  • 可以是普通的成员变量
  • 也可以有成员常量
成员方法
  • 可以有普通方法,也可以有抽象方法
  • 抽象类不一定有抽象方法
  • 有抽象方法的类一定时抽象类(或接口)
构造方法
  • 有构造方法,可以重载

final关键字

  • 作用
    • 修饰类:该类不能被继承
    • 修饰方法:不能被重写,不能与abstract共存
    • 修饰变量:只能赋值一次

static关键字

  • 作用
    • 修饰类的成员
      • 成员变量:类变量
        • 特点
          • 被本类所有对象共享
      • 成员方法:类方法/静态方法
        • 没有对象this,所以不能访问非静态成员
  • 调用方式
    • 类名.成员变量
    • 类名.成员方法名(参数)

接口

定义
  • interface 接口名{}
  • 类和接口时实现关系,用implements表示
    • class 类名 implements 接口
接口创建对象的特点
  • 接口不能实例化
    • 通过多态的方式实例化子类对象
  • 接口的子类(实现类)
    • 可以时抽象类,也可以是普通类
接口继承关系的特点
  • 接口与接口之间的关系
    • 继承关系,可以多继承
      • 接口 extends 接口1,接口2~~
继承和实现的区别
  • 继承体现的是“is a”的关系,父类中定义共性内容
  • 实现体现的是“like a”的关系,接口中定义扩展功能
接口成员变量的特点
  • 接口没有成员变量,只有公有的、静态的常量

    ​ public static final 常量名 = 常量值

接口成员方法的特点
  • JDK7及以前,公有的、抽象方法:

    ​ public abstract 方法值类型 方法名();

  • JDK8以后,可以有默认方法和静态方法:

    ​ public default 方法值类型 方法名(){}

    ​ static 方法值类型 方法名() {}

  • JDK9以后,可以有私有方法

    ​ private 方法值类型 方法名(){}

接口构造方法的特点
  • 构造方法
    • 接口不能被实例化,也没有需要参数的成员,所以接口没有构造方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值