JAVA_SE_笔记整理(面向对象二)

面向对象

1、继承:

继承概述:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。原因。

用法:class 子类名 extends 父类{}

单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。

继承的好处:

提高了代码的复用性,多个类的相同成员可以放到同一个类中。

提高了代码的维护性,如果功能更改只需修改一处。

让类与类之间产生了关系,是多态的前提:弊端,类的耦合性增强。

代码设计原则:高内聚低耦合

简单的理解:

内聚就是自己完成某件事情的能力。

耦合就是类与类之间的关系。

我们在设计的时候原则是:自己能完成的就不麻烦别人,这样将来别人产生了修改,就对我的影响较小。

由此可见:在开发中使用继承其实是在使用一把双刃剑。今天我们还是以继承的好处来使用,因为继承还有很多其他的特性。

继承的特点:

java只支持单继承,不支持多继承。

一个类只能有一个父类,不可以有多个父类。

// class SubDemo extends Demo{} // 是可以的。

// class SubDemo extends Demo1, Demo2{} // 不可以多个爹

java支持多层继承(继承体系)

class A{}
class B extends A {}

class C extends B {}

注意事项:

子类只能继承父类所有非私有的成员(成员方法和成员变量),可以继承父类的静态非私有属性。

其实这也体现了继承的另一个弊端:打破了封装性

子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。

不要为了部分功能而去继承。

继承中成员变量的关系:

子父类中同名和不同名的成员变量:

子类中访问一个变量

首先在子类局部范围内找

然后在子类的成员范围找

最后在父类成员范围找(肯定不能访问到父类局部范围)

如果还是没有找到就报错。

2super关键

super的用法和this很像

this代表本类对象的引用

super代表父类存储空间的标识(可以理解为父类对象的引用)

用法(this和super均可如下使用)

访问成员变量:

this.成员变量 super.成员变量

访问构造方法(子父类的构造问题讲)

this(…) super(…)

成员方法(子父类的成员方法问题讲)

this.成员方法() super.成员方法()

3、继承中构造方法的关系

子类中所有的构造方法默认都会访问父类的无参构造方法。

因为子类会继承父类中的数据,可以还会使用父类的数据。所有子类初始化之前,一定要先完成父类数据初始化。

每一个构造方法第一条语句默认都是:super();

如果自行显示调用,就不会默认调用super();

 

子类通过super去显示调用父类其他的带参的构造方法

子类通过this去调用本类的其他构造方法

本类其他构造也必须首先访问了父类构造

一定要注意:

super(…)或者this(….)必须出现在第一条语句

否则报错。

4、代码块

什么是代码块?

可以执行的代码段,简称代码块,{}中

三种:普通代码块,构造代码块,静态代码块。

普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”代码块中定义变量只在代码块中有效。

构造代码块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。 //如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。

注意:静态代码块,不可能存在于任何方法体内

静态代码块,不能直接访问实例变量和实例方法。需要通过实例对象来访问。

5继承中的成员方法:

通过子类对象去访问一个方法

首先在子类中找

然后在父类中找

如果还是没有就报错。(不考虑父类的父类)

方法重写概述:

子类中出现了和父类中一模一样的方法声明(定义),也被称为方法覆盖,方法复写。

使用特点:

如果方法名不同,就调用对应的方法。

如果方法名相同,最终使用子类自己的。

方法重写的应用:

当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

注意事项:

父类中的私有方法不能被重写

子类重写父类方法时,访问权限不能更低。

// 报错:正在尝试分配更低的访问权限; 以前为public-》子类重写后方为权限小于父类方法权限

父类静态方法,子类也必须通过静态方法进行重写。(其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解)

6final关键字

final关键字是最终的意思,可以修饰类,成员变量,成员方法。

修饰类,类不能被继承

修饰方法,方法不能被重写

修饰变量,变量就变成了常量,只能被赋值一次。普通变量被修饰成为局部常量。成员变量被修饰,成员常量。成员常量只能在构造方法及构造方法之前进行初始化。否则不允许初始化。

修饰成员变量:

基本类型,是值不能被改变

引用类型,是地址值不能被改变

final修饰成员变量初始化的时机:

在对象构造完毕前即可 (必须只赋值一次,不能重复赋值)

猜你喜欢

转载自www.cnblogs.com/songliuzhan/p/12624131.html
今日推荐