面向对象的一些简单的知识点

1、类和对象的关系

类是对象的抽象,对象是类的实例。类是抽象的,不占用内存,而对象是具体的,占用内存空间。一个类是一些具有相同属性和方法的对象的集合,可以创建类的对象来实例化对象。

2、面向过程和面向对象的区别和联系

两者都是在程序编写过程中所产生的编程思想,现有面向过程,才有面向对象。

面向过程主要是开发编写具有特定功能的方法或者函数,针对于程序运行的每个步骤有不同的方法,而面向对象则是整体上宏观把控,抽象出具体的类、属性和方法,然后通过实例化对象来满足程序的方法或者功能。一个是针对步骤,事必躬身,一个是把控整体,分配任务,其中面向对象在大型项目中应用更多,因为涉及到需求比较复杂,工程量较大。

两者都具有封装性,面向过程是把具有特定功能的方法或者函数进行封装,面向对象是把类封装。

面向过程没有继承性和多态性,可扩展性及代码复用性较差;面向对象有继承性和多态性,在可扩展性和代码复用性上要比较灵活,更能适应不同环境。

3、方法重载和方法重写(覆盖)的区别

方法重载,overload,要求必须在同一个类中,与权限修饰符无关,与返回值类型无关,方法名相同,参数列表不同,跑出异常无关,是为了在一个类中为一种行为提供多种实现方式;

方法重写或者叫做方法覆盖,override,要求是在有继承关系的类中,子类的方法权限修饰符要大于等于父类的,方法返回值类型要小于等于父类的,方法名相同,参数列表相同,子类跑出异常要小于等于父类的,是因为父类中的方法无法满足子类的要求才在子类中进行同名方法的重写,子类对象调用的是子类重写过的方法(父类的方法被重写的子类方法所覆盖,也有种说法是就近原则)。

4、this和super关键字的作用

this:代表当前对象,是对当前对象内存地址的引用。类似于指针

可以调用本类的方法;可以调用本类的构造方法,this()或者this(参数),必须放在方法的第一句;在出现二义性时,用this来代表成员变量

super:代表当前对象的直接父类,仅仅是个关键字

可以调用直接父类的方法,super.方法名();可以调用父类的构造方法,super()(当调用无参构造方法时可以省略不谢默认调用)或者super(参数),必须放在第一句;可以调用直接父类的非private属性

tips:this和super不能同时调用构造方法,因为都要放在第一句会导致程序编译错误不知道具体调用那个。

5、static关键字的作用,分为修饰变量、方法、代码块和内部类四部分

static修饰的变量为静态变量,被整个类所共享,在内存中只有一个副本,只有在类初次加载时被初始化一次

static修饰的方法为静态方法,可以不依赖与对象直接对其进行调用,但不能被this.方法所调用。在静态方法中无法访问类的非静态变量和非静态方法,但在非静态方法中可以调用静态变量和静态方法。

static修饰的代码块为静态代码块,一般用来优化程序性能,静态代码块可以放在类的任何位置,也可以有无数个,在类初次加载时按照顺序初始化,并且只会被加载一次。

static修饰的内部类为静态内部类,属于整个外部类而不是外部类的某个对象。不能访问外部类的非静态方法或变量,可以访问外部类的静态方法或变量。

6.继承条件下的构造方法调用规则

1.如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。

2.如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。

3.如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。

4.特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。

猜你喜欢

转载自www.cnblogs.com/du46568/p/8982782.html