Java面向对象总结

面向对象

面向对象编程思想

Object Oriented Programming 简称OOP

是当前主流的编程思想,将解决问题的所有参与对象创建出来,赋予对象对应的行为属性

类Class

具有相同的属性和行为的对象的集合。类也可以称为模板。

属性:描述对象的特征,在程序中,通过定义变量的形式表现属性。

行为:描述对象的动作,在程序中,通过定义方法的形式表现行为。

定义类

[修饰符] class{ 
    //属性,定义变量 
    //行为,定义方法
}

对象Object

对象是类的一个具体实例,是类的具体表现。

创建对象类名 对象名=new 构造方法(参数);

创建好的对象,使用.点操作符访问类中的非私有属性和方法

类和对象的关系

对象是类的具体表现,类是对象的合集(模板)。

成员变量、局部变量、静态常量

成员变量

定义在类中的变量,称为成员变量,拥有默认值。

局部变量

定义在方法中的变量,称为局部变量,没有默认值,赋值后才能使用

静态常量:

特殊的成员变量,使用范围在该类中,用static和final修饰,它通常需要在定义时赋值,在类加载时就创建,通过类名方法。

成员变量相关问题

简述成员变量和局部变量的区别以及生命周期

**区别:**成员变量定义在类中,有默认值。局部变量定义在方法中,没有默认值

**生命周期:**成员变量的生命周期:随着类创建对象,成员变量初始化,该对象回收,成员变量销毁局部变量的生命周期:随着方法调用,局部变量初始化,方法调用结束,局部变量销毁

构造方法

**是一个特殊的方法,没有返回值,方法名和类名一致。**每个类在定义时,都有一个默认隐藏的无参数的构造方法,在创建对象时自动调用,通常用于初始化成员变量。

特点

  • 没有返回值(没有返回值,并不是void),方法名和类名必须相同

  • 每个类默认有一个无参数的构造方法,方法体中没有内容

  • 构造方法不能通过.操作符调用,在创建对象时自动调用,所以通常用于初始化成员变量

  • 如果自己写了有参的构造方法,默认无参的构造方法就会失效,如果想要使用无参的构造方法,需要再写出来才能使用

  • 构造方法可以限制创建对象时的参数

  • 可以同时存在多个不同参数的构造方法,这称为构造方法的重载

面向对象的三大特性

封装

使用private关键字对属性进行修饰,可以防止除自身类之外的地方对该属性进行访问。

这样可以保护关键属性,隐藏类内部的实现细节,再对外提供一组公开的get/set方法用于对该属性的赋值和读取。

步骤

  • 给类中的所有属性添加private修饰符

  • 给每个属性定义setXX()方法用于赋值

  • 给每个属性定义getXX()方法用于读取属性

继承

类A可以通过extends关键字继承类B。

**语法:**class 类A extends 类B

类A称为子类、派生类、衍生类、subClass

类B称为父类、基类、超类、superClass

特点:

  • 不同的子类中相同的代码,都可以定义在父类中,减少子类中的代码冗余。

  • 子类对象可以直接访问父类中非私有的属性和方法。

  • 子类可以对父类中的方法进行拓展或覆盖,这称为方法重写,重写后,子类对象再调用该方法时,执行的是重写后的内容。

  • java中是单继承,一个子类只能有一个父类,一个父类可以有多个子类。

  • java中可以多重继承,类A可以继承类B,类B也可以继承类C,这时类A可以访问类B和类C中非私有的成员。

  • 任何类都是Object类的子类。

  • 在创建子类对象时,先执行父类中相应的构造方法。

重写override

当子类继承父类后,可以对父类中非私有的方法进行拓展。这个行为称为方法重写。

重写用于子类拓展父类的某个方法。

要求:

  • 方法名、参数列表、返回值必须和父类一致

  • 访问权限不能比父类更严格

  • 不能抛出比父类更大的异常

重载overload

在一个类中,如果多个方法的方法名相同,参数列表不同(参数类型不同或参数数量不同)时,这些方法称为重载的方法。同名不同参

重载用于在一个类中,某个方法在不同的条件下,执行不同的内容。

要求:

  • 方法名相同

  • 参数列表(参数类型和数量)不同

重载和重写相关问题

问:构造方法能重载吗?能重写吗?

答:构造方法能重载不能重写

问:构造方法执行时,一定创建对象吗?

答:不一定。创建子类时自动调用父类构造方法,不创建父类对象。

多态

需要使用一个父类对象时,实际传递的是一个子类对象,这时可以将子类对象当做父类对象使用。这种特性称为多态

实现前提

  • 必须是继承关系
  • 子类的对象保存到父类的变量中,子类通常会重写父类的方法
父类 对象 = new 子类();

this和super

都可以当做对象或构造方法使用。

**当做对象:**this表示当前类的对象,super表示当前类的父类对象

this或super当对象时,只能用在非静态方法中。

**当做构造方法:**this()表示当前类的无参构造方法,super()表示当前类的父类的无参构造方法

this或super当构造方法时,只能放在另一个构造方法的第一行。

每个继承关系中,如果父类和子类都没有重载构造方法时,子类里都有一个默认无参的构造方法,其中在调用父类的无参的构造方法

如果重载了父类的构造方法,在子类的构造方法中,一定要调用父类的某个重载的构造方法

Object类

是所有类的根类。任何类都直接或间接的继承了该类,但没有显式地写出来。所有类都可以调用或重写Object类中的方法。

重写toString()方法

在输出某个类的对象时,会自动调用该方法。该方法在Object类

中,默认输出"该对象的所在类全限定名@十六进制哈希码",通

常会重写该方法。

对象造型

类似于原始类型之间的数据类型转换。

向下转型

在有继承关系的两个类中,父类对象可以强行保存到子类变量中。

向上转型

在有继承关系的两个类中,子类对象可以直接保存到父类变量中。

重写equals()方法

equals()是比较两个对象是否相同的方法,默认Object中使用==比较,所以自定义类后,如果要比较该类的对象,一定要重写equals方法和hashcode方法,根据指定参数比较两个对象是否相同。

final

是一个关键字,通常用户修饰类、方法和属性。

**修饰类:**类不能被继承。

**修饰方法:**方法不能被重写。

**修饰属性:**变量变为常量,不能改变其值。

final、finally、inalize的区别

final是一个修饰符,用于修饰类、方法和属性,表示最终的,不可改变。

finally是一个关键字,在处理异常时,用于一定执行一段代码。

try{
    //有可能抛出异常的代码 
}catch(异常类型 异常变量){ 
    //如果抛出的异常和catch后的异常匹配,则执行的代码 }finally{ 
    //一定执行的一段代码 
}

finalize是一个方法名,即finalize()方法,属于Object类。在某个对象被垃圾回收机制GC当做垃圾处理时调用。

abstract

是一个修饰符,用于修饰方法或类

修饰方法

用法:访问修饰符 abstract 返回值 方法名(参数列表);

修饰方法,该方法称为抽象方法,没有方法体,同时该方法所在类一定也要使用abstract修饰成为抽象类。

修饰类

如果一个类中有抽象方法,该类一定得是抽象类。

用法:访问修饰符 abstract class 类名**{}**

特点:

  • 抽象方法只能出现在抽象类中,不能出现在普通类中。

  • 抽象类中可以没有抽象方法

  • 抽象类中有构造方法,但该构造方法不能使用new调用,所以抽象类不能创建对象

  • 抽象类中的构造方法,在创建其子类对象时自动调用

  • 抽象类通常需要被继承,继承后子类一定要重写抽象类中的所有抽象方法

interface

用于定义接口的关键字,代替原本的class。

定义接口:访问修饰符 interface 接口名{}

由于java是单继承,如果类A想要继承多个"父类"中的内容时,就不能使用extends,但可以使用implements实现多个接口而达到多继承的目的。

接口是一个完全抽象类,其中的方法都是被public abstract修饰的公开抽象方法,其中的属性,都是被public static final修饰的公开的静态常量,需要在定义时赋值才能使用。

接口和抽象类一样,通常需要子类继承,但继承接口,称为"实现接口"。使用implements关键字实现。

static

可以修饰方法和属性,表示该方法或属性是静态的,在类加载时保存到内存中,无需对象参数,直接通过类名就能访问。

如果某个属性或方法被高度重用时,可以将其定义为静态的,之后直接通过类名调用。

还可以在类中定义静态代码块static{}。在类加载时自动执行的代码块。

难点

1.多态特性的应用

2.重写和重载方法的应用

3.抽象方法

4.static的使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值