Java 复习 —— OOP

面向对象基本概念

1、面向对象(OOP、OOD)三大特点:封装、继承、多态。注意,抽象不是特点之一

2、面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象。现实世界中,数据和行为并存,程序也是如此,因此这两种编程方式我们都得学。

3、类的概念是一个抽象的概念,包括数据和对数据的操作,其中数据就是属性或成员变量,对数据的操作就是方法。

4、对象的概念是类的一种更具体表示。

5、函数则是游离在类之外的方法,java不支持,编译错误。


封装

1、封装:把数据与对数据的操作进行封装在一起。

2、java中方法参数传递只有传值,对于原生数据类型传的就把变量的值传递过去;对于引用数据类型则传递的是这个引用类型变量的地址,传递的地址值,这个值是常量不能修改,所以,C++中可以传指针,那是可以改变的地址值。

3、实例化(new)一个对象时需要执行三个步骤:

    1)开辟一个内存空间;

    2)调用类的构造方法;

    3)将对象的生成地址返回赋值给引用类型变量。

4、实例化的具体流程:

    1)父类的静态域初始化,父类静态成员变量的初始化以及静态代码块的执行,应该是按照成员变量和代码块的先后顺序;

    2)子类的静态域初始化,子类静态成员变量的初始化以及静态代码块的执行,应该是按照成员变量和代码块的先后顺序;

    3)父类的非静态域初始化,父类非静态成员变量的初始化;

    4)父类构造方法被调用;

    5)子类的非静态域初始化,子类非静态成员变量的初始化;

    6)子类构造方法被调用。


继承

1、继承:java单继承,子类继承父类。

2、关于继承的特点:

    1)构造方法不能被继承;

    2)子类在构造方法中默认调用了父类的无参构造方法,换句话如果父类没有这样的构造方法,那么运行时会报错;

    3)可以通过super();调用父类的构造方法,但是这条语句必须是构造方法的第一句,同样this()也是一样。

3、方法重写(Override)与重载(Overload),重写是子类对父类方法的覆盖,重载是相同方法名称不同参数而已。


多态

1、多态:晚绑定,即在编译时并没有多态,而是在运行时才有多态,所以说重写是运行时多态,而重载则是非运行时多态。

2、对于同名方法调用子类优先,但是同名属性调用则是父类优先;

3、关于多态注意事项:

    1)对于静态的方法和属性是可以被子类继承的同时也是可以被子类重写的,他和普通的非静态方法在继承上是有区别的;这里涉及到隐藏的问题,比如有个静态方法和一个静态属性的超类,这个时候一个子类继承了他,那么会把这些静态方法全部继承,同时这个时候子类也重写了这个属性和方法,注意重写时不能更改static,否则会编译报错;

如果,采用子类直接去调用这个方法和属性的话,返回的是子类定义的,其实也就是父类的被隐藏;
如果,采用子类的实例,而且这个实例就是子类类型的话,返回就是子类定义的,也是父类的被隐藏;

如果,采用子类的实例,但是这个实例是父类类型的话,返回的就是父类定义的,也就是子类被隐藏;

总结就是:由类型本身决定多态;

    2)对于非静态的属性,和上面的情况一模一样,他的多态完全由类型决定,而不是对象本身;

    3)对于非静态的方法,和上面就不一样了,他的多态是由对象本身决定,所以是运行时才知道的。

4、关于final使用注意事项:

    1)final修饰的类是不能被继承的,比如String

    2)final修饰的方法不能被重写,但是可以继承,默认也是static的,只是不能重写;

    3)final修饰的属性不能二次赋值,但是可以继承,同时可以同名覆盖,其实就是和static差不多,默认是static的


你可能感兴趣的:(继承,多态,封装,抽象,实例化流程)