Java基础笔记(七)面向对象(3)
Java面向对象基础
1.代码块
在java中,被一对花括号{}括起来的代码称为代码块。
代码块分为三种:
1.局部代码块
用于限定变量的生命周期,及早释放,提高内存利用率。一般常见的就是方法,方法中定义的变量在方法调用结束后就会被释放;
2.构造代码块
把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块。一般放在构造方法前;
3.静态代码块
对类的数据进行初始化,仅仅只执行一次;
2.继承
所谓继承,就是多个类具有相同的成员变量和方法,就可以把他们提取出来定义到一个独立的类中,然后其他类只要继承这个类,就可以拥有该被继承的类的所有成员变量和方法;一般这种类之间的关系我们称为父子类关系,且子类除了可以继承父类的所有功能,还可以扩展新的功能;
在java中,用extends关键字表示继承,当要继承一个类时,只需要在当前要继承的类定义的时候在类名后加上extends和要继承的类;
格式:
class 子类名 extends 父类名 {}
继承的好处:
1.提高代码复用性;
2.提高代码的维护性;
3.让类与类之间产生了关系,是多态的前提;
继承的弊端:
1.让类的耦合性增强;
2.打破了封装性;
Java中继承的特点
1:Java中类只支持单继承
2:Java中可以多层(重)继承(继承体系)
继承的注意事项:
1:子类不能继承父类的私有成员
2:子类不能继承父类的构造方法,但是可以通过super去访问
3:不要为了部分功能而去继承
Java继承中的成员关系
A:成员变量
a:子类的成员变量名称和父类中的成员变量名称不一样,直接访问就行
b:子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问呢?
在子类方法的局部范围找,有就使用。
在子类的成员范围找,有就使用。
在父类的成员范围找,有就使用。
找不到,就报错。
B:构造方法
a:子类的构造方法默认会去访问父类的无参构造方法,是为了子类访问父类数据的初始化
b:父类中如果没有无参构造方法,怎么办?
子类通过super去明确调用带参构造
子类通过this调用本身的其他构造,但是一定会有一个去访问了父类的构造
让父类提供无参构造
C:成员方法
a:子类的成员方法和父类中的成员方法名称不一样,这个太简单
b:子类的成员方法和父类中的成员方法名称一样,这个怎么访问呢?
通过子类对象访问一个方法的查找顺序:
在子类中找,有就使用
在父类中找,有就使用
找不到,就报错
3.继承中的小问题
什么时候使用继承
在继承父类的方法与字段都有意义的时候,选择继承。否则,不要使用继承。
在覆盖父类中的行为(方法)时,不要偏离最初的设计内涵。
overload和override的区别:
在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。
在方法重写时,子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。
方法重载(overload)
方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。
所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。
方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。
在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法。
重载要注意以下的几点:
1.在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。
2.不能通过访问权限、返回类型、抛出的异常进行重载。
3.方法的异常类型和数目不会对重载造成影响。
4.可以有不同的返回类型,只要参数列表不同就可以了。
5.可以有不同的访问修饰符。
6.可以抛出不同的异常。
4.Java的类的加载顺序
父类的静态字段——>父类静态代码块——>子类静态字段——>子类静态代码块——>父类成员变量(非静态字段)——>父类非静态代码块——>父类构造器——>子类成员变量——>子类非静态代码块——>子类构造器