面向对象总结

Posted 我来自火星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象总结相关的知识,希望对你有一定的参考价值。

我认为封装解决了代码的私密性,继承解决相同代码复用,多态解决不同代码的使用。

面向对象是一种思维方式。类就相当于模板,对象相当于具体实例,类的方法和属性是先于对象。在内存分析中,类是加载代码时就存在堆内存中的方法区,而对象是在new后才存在是堆内存中,栈内存存在变量名称和方法名称。new的实质是调用类中的构造器,用于初始化值,构造器有不同重载,可用于不同参数列表的初始化。面向对象的三大特征,封装是为了保密和安全,属性私有,只暴露少量的方法供外面使用。继承是父子关系的类,提高代码的利用,父类的方法,子类可以直接使用。多态,也是为了提高代码的利用,可以使用多态用于方法参数和返回值,避免了使用重载重复。类在不同位置可有不同特点。

什么是面向对象

本质是以类的方式组织代码,以对象的形式组织(封装)数据。

方法的定义

  • 修饰符
  • 返回类型
  • break:跳出switch,for循环,return:结束方法,返回值
  • 方法名:
  • 参数列表:参数类型,参数名 ...
  • 异常抛出

方法的调用

  • 静态方法
  • 非静态方法
  • 形参和实参
  • 值传递和引用传递
  • this关键字

创建与初始化对象

new

分配内存空间,默认初始化以及调用类中的构造器。

构造器

new调用相应构造器,用于实例化初始值

特点

  • 必须与类的名字相同
  • 必须没有返回类型,也不能写void

注意:定义了有参构造器,想用无参构造器,必须显式定义无参构造器。

创建对象内存分析

image

类与对象

  • 类是一个模板,对象是一个具体的实例。
  • 对象是通过引用来操作,堆-->栈(地址)
  • 类的结构:成员变量(默认初始化),方法(定义和调用)

封装

数据的隐藏

高内聚:类内部数据操作细节自己完成

低耦合:暴露少量方法供外部使用。

属性私有(private):get/set。可用于数据安全性的判断。

继承

extends

子类与父类是一个"is a"关系,子类拥有父类的所有方法。

object

final 修饰的类不能继承

没有多继承,但是接口可以多继承。

super

super()调用父类构造器,必须要在子类构造器的第一行。

子类调用父类属性和方法。父类权限在public,protected.

方法重写(override)

需要有继承关系,子类重写父类方法。

  • 方法名必须相同。
  • 参数列表必须相同。
  • 修饰符:范围可以扩大,但不能缩小。public>protected>default>private
  • 抛出异常:范围可以缩小,但不能扩大。

父类的引用指向子类

静态方法与非静态方法的区别:

静态方法:方法的调用只和左边定义的数据类型有关。两种状态:多态。

非静态方法:重写。只与子类方法有关。

不能重写:

  1. static方法,属于类,不属于实例
  2. final 常量
  3. private方法

多态

即同一方法可以根据发送对象的不同而采取多种不同行为方式。

存在条件

  • 有继承关系
  • 子类重写父类方法
  • 父类引用指向子类对象

instanceof

类型转换,引用类型,用于判断一个对象是什么类型。

X instanceof Y:编译能不能通过看X引用与Y是否有关系,true 还是 false注意看X的对象是Y的什么关系。

类型之间的转化:

  • 父换子,需要强制转换,才能使用子类的方法。

  • 子转父,自动转化,可能丢失自己本来的一些方法。

方便方法的调用,减少重复代码。

Static

加载顺序:静态代码块(只执行一次),匿名(非静态)代码块(创建对象执行),构造方法。

静态导入包:

import static java.lang.Math.random;

抽象类

abstract-可修饰方法,也可修饰类。

抽象方法,只有方法的声明,没有方法体。

有抽象方法的类必须申明抽象类。

抽象类不能使用new创建对象,只能子类继承。且子类必须实现抽象方法,否则申明为抽象类。

接口interface

需要通过实现类implements 接口,可以多继承

只有规范,实现约束与方法的分离。

所有的方法定义默认都是 public abstract,所有变量默认都是常量,public static final

内部类

  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

以上是关于面向对象总结的主要内容,如果未能解决你的问题,请参考以下文章

面向对象总结

《数据结构与面向对象程序设计》第三周学习总结

java 面向对象总结

面向对象总结

《数据结构与面向对象程序设计》第01周学习总结

20182323 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结