1-Java基础回顾整理_07_面向对象

Posted 用code筑造世界

tags:

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

1、面向过程与面向对象

  面向过程思想:1)执行步骤清晰明了,第一步,第二步。。。  (是线性的)

         2)主要用来处理一些比较单单的问题;

  面向对象思想:1)物以类聚,是一个分类的思维模式,会首先思考解决问题需要哪些分类,然后对这些分类进行单独的思考,最后才对某个分类下的细节进行面向过程的思想;

         2)适合处理复杂的问题,以及一些需要多人协作的问题;

  总结:

    客观上使用面向对象的思路,微观执行上使用面向过程的思路来处理;

2、面向对象的本质

  以类的方式组织代码,以对象的组织来(封装)数据

  核心思路:就是抽象

  面向对象三大特性:封装:暴露的东西越少,代码复用性就越高,接口也会更加的适用

           继承:比如儿子继承父亲,父亲有的东西儿子都会有

           多态:比如同样是一个人,不同的人有不同的收获,特点不同,就是多态

3、面向对象与类的关系

  1)从认识代码角度看:是先有的对象后有的类,对象是具体的事物,类是抽象的,类是对对象的抽象

  2)从代码运行角度看:是先有类后有对象,类是对象的模板

4、break与return

  break作用:跳出switch循环,结束循环;

  return作用:方法的结束,返回值;

5、方法回顾

  当类里面的方法声明中含有static关键字,那么这个方法不能被其他没有static关键字修饰的方法调用,因为有了staitc关键字,那么这个方法就是和类一起创建的,比没有static关键字的普通方法出现的要早,普通方法是和对象有关的,当类对象实例化之后才存在;

6、值传递与引用传递

  值传递:就是方法的形参,当没有返回值的时候,对调用方法的原原参数不会产生影响;

  引用传递:传递的是对象,如果更改了对象里面的属性值,那么就会对该对象产生影响

7、this关键字指的是当前的这个对象

8、类与对象的关系

  1)类是一种抽象的数据类型,它是对某一类事物的描述/定义,但是并不能代表某一具体的事物;

  2)对象是抽象概念的具体实例,它能体现出特点,展示的功能是具体的实例,而不是一个抽象的概念;(万物皆对象)

  类对象实例化之后会返回一个自己的对象,如:Student对象就是一个Student类的具体实例,同一个类可以产生不同的对象,但是它们拥有共同的特性

    如:Student stu1 = new Student();

      Student stu2 = new Student();  stu1 与 stu2 就是两个对象,但是他们的特性相同

9、对象的创建与初始化

  当使用new关键字创建对象时,此时java会给对象分配内容空间,还会给创建好的对象进行默认的初始化,以及对该类中构造器的调用

  构造器:

    构造器即为构造方法,在创建的对象的时候必须进行调用;

    注:1)构造方法名必须与类名相同;2)必须无返回值,且不能写void

  构造类型:

    构造分为无参构造和有参构造(全参构造、部分参构造)

    注:当方法中只有无参构造的时候,系统会默认进行创建,此时可省略

      若方法中有有参构造,那么则需要加上无参构造,避免在创建对象的时候发生错误

10、Java程序在运行的时候,首先会加载一些程序所要运行的模板

  面向对象三大特征:封装、继承、多态

11、封装:

  见名知意,就是把一个东西(对象)装起来,只留一下一个小口子,与外界进行交流

  当方法中的属性私有(private)的时候,就要使用get/set来达到方法私有属性操作的目的;

  意义:

    1)安全性提高;

    2)隐藏了代码的细节;

    3)统一了接口;

    4)系统的可维护性增强;

12、继承

  本质就是对某一批类的抽象,从而实现对现实世界更好的建模

  注:1)Java中的类只有单继承,没有多继承

    2)父类方法中的私有属性,子类无法继承

    3)子类调用父类的无惨构造时,super()一定要写在最前面,

    4)super只能出现在子类的方法或者构造方法中

    5)super()和this()不能同时使用。

  比较:

    this()本类的构造方法    super()父类的构造方法

13、方法的重写

  当继承发生的时候,就会涉及到方法的重写,重写与重载不相同,重写是方法的重新编写,和属性无关

  注:

    1)方法名必须相同

    2)参数列表必须相同

    3)修饰符:范围可以扩大但是不能缩小,public > protected > default > private

    4)抛出的异常:范围可以被缩小,但是不能扩大,classNotFoundException(小) -> Exception(大)

  为什么重写:

    父类的方法功能,子类不一定需要,或者不一定满足自己的需求;

14、多态

  本质可以理解为一句话:父类引用指向子类对象,如:Service service = new ServiceImpl();

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

  当含有static关键字的区别:

    静态方法的调用只和左边定义的数据类型有关;

    非静态方法的调用:就是对父类发的重写

  注意:

    1)多态是方法的多态,不是属性的多态,属性没有多态;

    2)父类和子类有一定的联系,进行类型转换可能会出现类型类型转换异常:ClassCastException;

    3)存在条件:继承关系,方法需要重写,父类引用指向子类对象;

      下列情况不能重写:

        1、static方法,它属于类,不属于实例

        2、final修饰的常量

        3、private修饰的方法

15、instanceof,类型判断

  1)用来判断一个对象是什么类型

    如:Student stu = new Student();

      System.out.println(stu instanceof Student);

  2)可以用来判断打印语句能不能编译通过,若能通过,则存在父子关系,若不能通过,则不存在父子关系;

16、引用类型转换(与基本数据类型转换类似)

  低转高,自然转换,如:Person person = new Student();

  高转低,强制类型转换,需要在对象前加括号,里面写上要转换的类对象,Student stu = (Student) person;

  注意:

    子类转换为父类时,可以回丢失一些自己本来的一些方法,也就是父类引用指向子类对象,所以通常会方法实现接口方法重写;

17、导入静态包

  java.lang包下的类,当我们调用的时候,需要写类名.方法名()来调用,如果我们想直接调用方法,不想写类名的时候,由于lang包下的类里面的方法都是static关键字修饰的,所以需要导入对应的包方法;  如:import static java.lang.Math.random;

18、类与接口

  类是单继承的,接口可以多继承(其实是通过实现多个接口侧面验证接口可以多继承)

19、抽象类:

  1)抽象类不能使用new关键字来创建对象,只能靠子类去实现,它是一种约束;

  2)抽象类中可以写普通的方法

  3)抽象方法必须在抽象类中,即:若方法中有abstract关键字,那么类的声明中也必须有abstract关键字;

  注意:

    抽象类既然不能通过new关键字创建对象,那么它的方法中是不存在构造器的;

    抽象类存在的意义:提高开发效率

20、接口

  接口是一种规范,定义的是一组规则,它的本质就好比契约,制定好后大家共同遵守,它自己无法写方法,是一种专业的约束,它实现了约束和实现的分离:面向接口编程;

    普通类中,只有具体的方法实现;

    抽象类中,有具体的实现和规范(抽象方法),两者都有,只是不能new

  OO(面向对象)的精髓:是对对象的抽象,最能体现这一点的就是接口。所以为什么当我们讨论设计模式的时候,只针对具有抽象能力的语言(如:java、C++、C#),就是因为设计模式研究的实际就是如何合理的去抽象;

21、接口的实现

  通过implements 关键字来实现接口,实现了接口的类,那么就要重写几口中的所有方法;

  注意:  可以实现多个接口(侧面验证了接口可以多继承)

  作用:

    1)接口中的方法,都是public abstract修饰的

    2)接口中的常量,都是public static final 修饰的,但不建议在接口中进行使用(在平时要锻炼自己的抽象思维,通过接口来定义一个系统,架构师不是梦)

    3)它是一种约束

    4)定义的一些方法,去让不同的人去实现

    5)接口不能被实例化,也就是不能new,因为接口中没有构造方法

    6)通过implements关键字可以实现多个接口,但必须要重写接口中所有方法

22、内部类

  常用的是匿名内部类

  

以上是关于1-Java基础回顾整理_07_面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Java知识系统回顾整理01基础02面向对象02属性

Java知识系统回顾整理01基础02面向对象03方法

Java知识系统回顾整理01基础02面向对象01类和对象

基础知识回顾——面向对象编程

Python 面向对象 之 多继承 MRO

Java基础知识回顾