《张三记录-java》面向对象

面向对象

一.面向对象简介

1.面向对象是什么

oop : Object Oriented programming

面相对象是一种程序设计的范型,一种思想。 使用类 和对象 的概念来进行设计程序

一切皆对象,世间万物都是对象

2.两个概念

2.1类

​ 类是具有相同的特征和行为的一组对象的抽象

​ 张三 李四 王五 ---- 人类

​ 旺财 大黄 二狗 ---- 狗类

​ 类是同一类型的抽象,没有具体事物与之对应 : 如 人类 狗类

2.2 对象

​ 对象是类的实例

​ 对象是某个具体事物: 如 这个学生 这只狗

​ 类和对象的关系: 类是对象的模板 对象是类的具体体现

二.类的使用

1.定义类

语法:

public class 类名{
    // 属性    --   这种类型的特征
    // 方法    --   这种类型的行为
    
}

类:

  • 一个类就是一个数据类型,定义一个类其实就是创建了一个类型 — 引用类型
  • 类名 要规范
  • 一个文件(.java)中可以定义多个类,但只能有一个public修饰的类,且此类的名称必须与文件名相同

属性:

  • 类的特征
  • 定义方式 : 数据类型 属性名;
  • 属性名要规范 驼峰命名法

方法:

  • 类的行为
  • 定义方式: public 返回值类型 方法名(参数){ 方法体 具体代码 }
  • 方法名 驼峰命名法 一般多使用动词 updateStudent run

2.创建对象

语法:

//方式一
类名  对象名  = new  类名();
//方式二
类名  对象名;
对象名 = new  类名();

3.访问对象

访问对象的属性: 对象名.属性名

访问对象的方法: 对象名.方法名()

三.this关键字

1.全局变量和局部变量

全局变量:

  • 在类中定义的变量,称为全局变量,也就是属性
  • 在整个类都可以使用 — 作用域
  • 有默认值,可以直接使用

局部变量:

  • 除了全局变量以外的其他变量,如: 主方法中,自定义的方法,某个段代码中

  • 只能在局部使用

  • 没有默认值,必须赋值才能用

  • 局部变量和全局变量同名,局部变量的优先级更高。 默认访问的是局部变量

    可以使用this关键字来解决局部变量和全局变量同名的问题

2. this用法

this 表示当前类的一个对象

  • 局部变量和全局变量同名,可是使用this.变量名,来访问全局变量
  • this可以用来调方法

四.static关键词

static 表示静态的,可以用来修饰变量和方法,分别称为 静态变量 静态方法

1.静态变量

使用 static 修饰的变量 : static 数据类型 变量名;

静态变量为类的所有对象共有,属于整个类,不属于某个对象特有

静态变量只在内存中分配一块空间

访问方式: 对象名.变量名 类名.变量名(推荐)

2.静态方法

使用static修饰方法

访问方法: 对象名.方法名 类名.方法名()推荐的

静态方法中只能访问静态变量或调用静态方法,不能直接访问普通方法和变量

五.方法的重载

一个类中包含两个或两个以上同名的方法,其参数不同,称为方法的重载(overload)

  • 在同一个类中
  • 方法名相同
  • 参数列表不同 (参数个数,类型,顺序至少有一项不同)
  • 与方法的返回值类型,形参名无关

六.构造方法

构造方法是一种特殊的方法,也称 为构造函数, 构造器 constructor

作用: 用于创建对象 和初始化对象的(对对象进行初始化赋值)

特点:

  • 方法名必须与类名相同

  • 没有返回值,不能写void

  • 当创建一个类的对象时,实际上会自动调用构造方法

  • 如果没有自定义的构造方法,类中会有一个默认的无参的构造方法

  • 一个类中可以有多个构造器(构造方法的重载)

    没有参数的构造器: 创建一个没有初始值的对象

    可以带一个或多个参数的构造器: 在创建对象的同时初始化对象,给指定的属性赋值

  • 如果自定义了构造方法,默认的无参构造就没有。

  • 可以使用this(参数) 调用当前类中的另一个构造方法,但只能出现在构造方法的第一行

七.包 package

包的作用:

  • 区分同名的类
  • 类比较多的时候 便于管理

声明包:

  • 用来指定当前类所在的包
  • package 包名;
  • 必须位于第一行(注释行不算)

命名规范:

  • 采用反向域名法 com.公司名.模块名 com.baidu.fanyi com.itany.user
  • 使用小写字母

导入包:

  • 当需要使用其他包中的类时必须导入包
  • 使用import import 包名.类名
  • 必须位于包声明的下面

java.lang 包 中包含了java的核心类, 默认自动导入, 不需要import导入

八.访问修饰符

用来控制访问的范围 ,可以修饰属性,方法, 类等;

修饰符同一个类同一个包中的类不同包的子类不同包并不是子类
public 公开的
protected 受保护的
默认
private 私有的

总结:

  • public :在哪都能访问
  • protected: 只有不同包并且不是子类就不能访问,其他能访问
  • 默认: 只有在同包中可以访问
  • private: 只有在本类中可以访问
  • 范围的从大到小的顺序 public > protected > 默认 > private

九. 对象初始化顺序

1.类加载

概念: 将 class文件读取到JVM内存中的过程,称为类加载。

类加载的时机

  • 创建类的对象
  • 调用类的静态属性或静态方法时
  • 执行main方法时,main方法所在的类会被加载
  • 通过反射调用类

2.类的成员

类中有哪些成员

  • 属性(静态属性,非静态属性(实例属性))
  • 方法(静态方法 实例方法)
  • 构造方法
  • 代码块 ( 静态代码块 , 普通代码块)

3.执行顺序

执行顺序 : 静态代码块 》 代码块,属性 》 构造方法 》 根据调用顺序执行具体的方法

十. 面向对象的三大特征

1.封装

1.1java代码规范

  • 将类的属性封装在类中,不允许在类的外部直接访问,保证数据安全性,使内容可控
  • 只能通过特定的方法才能对数据进行访问
  • 类的基本原则就是封装

1.2实现方式

  1. 将属性私有化

    使用private 修饰属性

  2. 提供对外访问的方法, 用于赋值和取值

    使用public 修饰方法

    方法的名字规范:

    • 赋值方法: 以set开头,后面接属性名 如:setName()
    • 取值方法: 以get开头,后面接属性名 如: getName()

2.继承

2.1概念

可以让一个类继承另一个类,此时该类会继承另一个类中的属性和方法

去继承的类称为子类,被继承的类称为父类(超类/ 基类)

继承是一种 is a 的关系 cat is a animal user is a person

2.2 实现方法

语法:

public  class 子类   extends  父类{
    
}

作用:

  • 代码复用: 将多个子类中相同的属性和方法 定义到父类中
  • 功能扩展: 子类可以有自己独特的属性和方法

特性:

  • java中只支持单继承。 但支持多层继承,继承的传递

  • java中所有的类都直接或者是间接的继承了 java.lang.Object类 (后面会讲)

    Object类是所有类的父类 ,每个类都会继承 Object类中的方法

2.3 继承的范围

子类可以继承父类的哪些成员

  • 父类中用 public protected 默认 修饰的属性和方法,都可以继承 (同包的情况下)
  • 父类中private 修饰的属性和方法不能被子类继承
  • 父类的构造方法不能被子类继承( 构造方法 名必须与类名相同,而子类名称不可能与父类名称相同)

2.4构造方法的调用

调用过程:

  • 创建子类对象时,会自动调用父类无参的构造方法(此时必须保证父类中有无参的构造,否则子类会报错)
  • 从子类 开始,依次往上调用父类的构造方法,直到Object类,然后在会到子类中,执行后续的代码

super关键字:

  • 表示父类的对象,只能在子类中使用
  • 可以使用 super() 调用父类的构造方法 ,位于第一行
  • 可以使用 super.xxx 访问父类的属性和方法。解决父类和子类属性同名的问题

2.5方法的重写

​ 子类中的方法,与父类中的方法名称,参数,返回类型都一样,我们就说子类重写了父类的方法,称为为方法重写 override

  • 在父子类
  • 返回类型可以相同 也可以是子类类型
  • 访问修饰符不能缩小

作用:用来重写定义子类的行为,解决父类和子类的差异性

面试: 方法重写和方法重载

3.多态

3.1概念

多态: 一种事物,具有多种表现形态。

多态的体现: 重写, 父类的引用指向子类的对象。 称为向上转型(自动转换)

基本类型之间的转换

  • 自动
  • 强制

引用类型之间的转换

3.2引用类型之间的转换

  • 自动(向上转型)

    将子类对象转换为父类 Student ----- Person

    将父类的引用指向子类的对象

    特性:

    • 通过父类保存 的变量 调用的是 子类 重写后的方法,不是父类的方法
    • 通过父类保存的变量 无法调用子类特有的属性和方法
  • 强制(向下转型)

    将父类转为子类, 进行强制转换

    语法: (子类类型)父类对象

    特性:

    • 向下转型后,可以访问子类特有的属性和方法
    • 转换时,父类必须为真实的子类类型,否则会出现转换异常 ClassCastException(类型转换异常)
    • 向下转型是不安全的。 可以在转换时 使用 instanceof 关键字去判断当前对象的类型,避免出现转换异常

3.3多态的应用

将父类作为方法形参,将子类的对象作为方法实参,实现多态---- 减少代码量

将父类作为 返回类型, 可以直接返回子类类型 ----- 减少代码量

案例: 主人类 宠物类 (Pet类 Dog类 Cat类)

  • 主人类: 领养宠物,给宠物喂食,与宠物玩耍的方法
  • 宠物类: 吃食物,玩耍的方法

优点:

  • 减少代码量
  • 提高可扩展性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值