Java基础-面向对象

一、面向对象定义

  1. 面向对象编程(Object-Oriented Programming,OOP)
  2. 本质就是:以类的方式组织代码,以对象的组织(封装)数据。
  3. 抽象,三大特性:
    • 封装
    • 继承
    • 多态

二、方法调用

  1. 静态方法,可以直接通过类名进行调用方法,是和类一起加载的。
  2. 非静态方法,实例化后才可以调用非静态方法,实例化之后才存在的。
  3. 形参和实参
  4. 值传递和引用传递,Java都是值传递。
  5. this关键字

三、类与对象的关系

  1. 类是一种抽象数据类型,它是对某一类事物整体的描述,但是并不能代表某一个具体的事务。
  2. 对象是抽象概念的具体事例。

四、创建与初始化对象

  1. 使用new关键字创建对象,本质是在调用构造器,用来初始化对象的值。
  2. 创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
  3. 类中的构造器也称为构造方法,是在创建对象的时候必须要调用的,并且构造器有以下两个特点:
    • 必须和类的名字相同
    • 必须没有返回类型,也不能写void
  4. 一旦定义了有参构造,无参构造就必须显示定义。
  5. 内存分析:图
  6. 对象是通过引用来操作:栈--->堆

五、封装

  1. 程序设计要追求“高内聚,低耦合”,高内聚就是类中的内部数据操作细节自己完成,低耦合,仅暴露少量方法给外部使用。
  2. 封装(数据的隐藏),禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
  3. 属性私有,get/set,统一接口,提高可维护性。

六、继承

  1. 继承本质是对某一批类的抽象,从而实现对现实世界更好的建模。
  2. extends的意思是“扩展”。子类是父类的扩展。
  3. Java中只有单继承,没有多继承!
  4. 继承是类与类之间的一种关系,除此之外,还有依赖、组合、聚合等。
  5. 子类和父类的关系是“is a”的关系,就会拥有父类的全部方法(public)。
  6. object类
  7. super:
    • 调用父类的构造器必须要在子类构造器的第一行。
    • 子类构造器中默认调用了父类的无参构造器。
    • super必须只能出现在子类的方法或者是构造方法中。
    • super和this不能同时调用构造方法。
    • this代表调用者这个对象
    • super代表父类对象的应用
    • this没有继承也可以使用
    • super只能在继承条件下才可以使用
    • this(); 本类的构造
    • super(); 父类的构造
  8. 方法重写(需要有继承关系,子类重写父类的方法):
    • 父类的引用指向了子类
    • 静态方法的调用只和左边,定义的数据类型有关
    • 非静态方法:重写,只能是public的
    • 方法名必须相同
    • 参数列表必须相同
    • 仅仅是方法体不同
    • 修饰符:范围可以扩大但是不能缩小:public>protected>default>private
    • 抛出的异常:范围可以被缩小,但是不能被扩大
    • 父类的功能,子类不一定需要或者不一定满足
    • static方法属于类,它不属于实例;final常量;private方法;以上都是不可以重写的

七、多态

  1. 即对于同一方法可以根据发送对象的不同而采用多种不同的方法。
  2. 一个对象的实际类型是确定的,但是可以指定对象的引用的类型可以有很多。
  3. 多态存在的条件:
    • 有继承关系
    • 子类重写父类方法
    • 父类引用指向子类对象
  4. 多态是方法的多态,属性没有多态性
  5. 实际类型是父类,但是子类重写了父类的方法,执行子类的方法。
  6. 对象能执行哪些方法主要看对象左边的类型,和右边关系不大。
  7. 子类调用的方法是自己的或是继承父类的方法;父类可以指向子类,但是不能够调用子类独有的方法。

8. instanceof:

  • 判断一个两个类是否有父子关系。
  • 子类转化为父类,可能丢失一些本来的方法,向上转型,自动转型。
  • 父类转化为子类,向下转型,强制转换。
  • 方便方法的调用,减少重复的代码,简洁。
  • 代码:
System.out.println(x instanceof y);//能不能编译通过,是看x和y是否具有父子关系
//输出是true还是false,是看x引用的类型是否是y的子类

9. static

  • 静态变量,通过类名进行调用
  • 非静态变量,通过实例进行调用
  • 非静态方法可以去访问静态方法,因为静态方法是跟类一起加载的。静态方法也可以调用静态方法,但是静态方法不能够调用非静态方法,因为只有实例化的时候非静态方法才进行加载。
  • 匿名代码块(赋初始值),是在构造方法前面,静态代码块是自动加载的,在匿名代码块前执行,static代码块只执行一次。
  • 静态导入包import static java.lang.Math.random;,之后可以直接调用函数。

八、抽象类

  1. abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法,如果修饰类,那么该类就是抽象类。
  2. 抽象类中可以没有抽象方法,但是一定要声明为抽象类,也可以存在普通方法。
  3. 抽象类,不能够使用new关键字来创建对象,它是用来让子类继承的。
  4. 抽象方法,只有方法的声明,没有方法的实现,它是让子类来实现的。
  5. 子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则子类也要声明为抽象类。

九、接口

  1. 普通类,只有具体实现
  2. 抽象类,具体实现和规范(抽象方法)都有
  3. 接口:只有规范,自己无法写方法,专业的约束,约束与实现分离:面向接口编程
  4. 接口就是规范,定义一组规则,没有构造方法,public abstract;public static final
  5. 接口的本质是契约
  6. OO的精髓,是对对象的抽象,最能体现这一点的就是接口
  7. 声明类的关键字是class,声明接口的关键字是interface
  8. implements ,为了实现接口的类,就需要重写接口中的方法,多继承利用接口实现多继承

十、内部类

  1. 内部类可以获得外部类的私有属性、方法。
  2. 静态内部类没办法访问外面非静态的属性、方法了。
posted @ 2021-01-16 16:22  睿晞  阅读(79)  评论(0编辑  收藏  举报