Java中面向对象思想
面向对象本身基于面向过程….
面向过程:需求分析,建立功能代码块,完成功能代码块的业务逻辑,开始调用代码块;
面向对象
面向对象的思想特点:
1)让复杂的事情简单化
2)让我们从执行者变成指挥者(角色发生变化)
3)更符合我们生活中的思想行为习惯…
面向对象的设计原则:
在不断地创建对象,使用对象,指挥对象做事情
举例:键盘录入Scanner;
创建文本扫描器对象,使用这个对象录入数据,完成操作;
面向对象的特征:
1)封装:将一个事物的书写私有化(对外隐藏),外界不能直接访问(保证数据安全);需要提供对外公共访问来访问成员变量;
关键字:private:被私有的变量/方法只能在本类中访问;外界不能直接访问;但是可以通过公共方法简介访问;
private的关键字特点:
一个标准类的写法:需要在类的成员变量上加入private,提供对外的public的公共访问方法;
一个类的组成:
1)成员变量
2)加入构造方法
无参/有参
3)成员方法
2)继承:
将多个类的共性内容抽取到一个独立的类中,然后独立的类和这些类产生一种“继承”关系;
子类继承父类,继承父类中相关的属性或者行为…
关键字:extends
格式:
class 父类名{ }
class 子类名 extends 父类名{ }
Java提供的“继承” 特征的好处:
1)提高了代码的复用性;
2)提高了代码的维护性;
3)让类与类之间产生关系----是“多态的前提条件”;
注意事项:
1)子类继承父类,只能继承父类非私有的成员,私有的成员,外界不能访问,只能间接通过公共方法来访问;
子类中的功能:一般都是一些子类的特有功能;
2)
开发中,设计原则:都要遵循“低耦合,高内聚”;
耦合:类与类产生的关系;
低耦合:这种关系越少越好! 只能避免,不能彻底解决; (Spring框架:IOC 控制)
内聚:执行某件事情的能力
高内聚:在一个类中能够完成的事情,不要使用多个类来完成;
继承的特点:
1)在Java中,类与类之间,只支持单继承,不支持多继承;
2)在Java中,类与类之间,虽然不能多继承,但可以多层继承;
继承中:一个类的组成
1)成员变量
2)构造方法
3)成员方法
继承的关系问题:
1)子类继承父类,如果子类的成员变量名称和父类的成员变量名称不一致的情况:
比较简单,分别访问即可;
2)子类继承父类,如果子类的成员变量名称和父类的成员变量名称一致的情况:
a)先在本类的局部位置找,有没有这个变量,有就直接使用;
b)如果本类的局部位置没有,在本类的成员位置中找,有就在直接使用;
c)如果本类的的成员位置没有,在它的父类的成员位置找,有就使用;
d)父类的成员位置否没有这个变量,压根不存在,就报错;
继承关系中,构造方法的访问
子类继承父类,不能够继承构造方法,但是可以通过super( )间接访问父类的构造方法,
子类的所有构造方法都默认访问父类的无参构造方法:子类的每一个构造方法的第一句话:super( );
super:代表的是父类的空间标识(代表父类的对象的地址值引用)
为什么要让父类初始化呢?
因为子类继承父类,可能会使用到父类的数据,所以必须先让父类初始化,然后子类再初始化(分层初始化)
在写父类的时候,在继承中由于存在默认的访问问题,所以父类一定要永远给出无参构造方法;
如果父类没有给出无参构造方法导致子类无法访问并报错,解决方案:
1)手动给出父类的无参构造方法;
2)在子类的所有构造方法中,间接通过super(xx),访问父类的有参构造方法;
3)子类的所有构造方法中,只要有一个能够让父类初始化即可;(不推荐)
执行子类无参构造方法,先执行本类的有参构造方法:this(xx)
然后在通过本类的有参构造方法: super(xx):间接访问父类的有参构造,完成父类的初始化;
this和super的区别:
this:代表本类对象的地址值引用;
super:代表的父类空间标识(父类对象的地址值引用);
this.变量:访问的本类的成员变量;
this.方法名():访问的本类的成员方法;
this&