面向对象:
1、对象:什么都是对象 客观存在,有什么(属性),能做什么(方法)
问题空间和解空间最大限度的统一
符合我们看待客观世界的规律
各司其职(简单)
各尽其能
弱耦合性
可重用性
可扩展性
2、类:对象的抽象,客观对象在人脑中的主观反映。对象的模版
属性:实例变量:默认值 作用范围至少是本类内部 可以和局部变量命名冲突
方法:声明 实现
修饰符 返回值 方法名 参数表 异常
3、重载:(Overload):方法名相同,参数表不同 又叫编译时多态
重载是为了使得对象同类方法由于参数表不同所造成的差异,这个差异对使用者是屏蔽的
向上就近匹配原则(当有多个参数时,选择少提升的参数)(课堂代码:TestOverload.java)
4、构造方法:构造方法可以重载,构造方法是由系统自动调用的
若对一个类没有写构造方法,则构造对象时会自动调用默认的无参的空的构造方法,但要求最好自己写构造方法,不要依赖默认的构造方法
java中没有析构方法,也不允许程序员自己定义析构方法,因为java中有自动垃圾收集器
5、构造对象的过程:1)分配空间(堆空间),根据类中的属性决定分配多大的空间,分配的时候先初始化为0
2)初始化属性(根据给定的值初始化)
3)调用构造方法
6、创建对象格式:类名 对象名=new 类名(参数表)
int a; //简单变量
Student s; //声明一个Student类的对象变量(或称引用)
s = new Student(); //调用Student类的无参的构造方法,创建一个对象,把这个对象的地址赋给一个Student类的引用
(引用指向了这个对象,引用中保存对象的首地址,以后都是通过引用访问这个对象的属性和方法)
s.age s引用指向对象的age属性
7、引用和对象的区别 (课堂代码:TestClass.java)
Student s;只是声明一个引用,不会创建对象
this引用:
两种用法:
1)用来区分实例变量与局部变量的冲突
例:public Student(int age){
this.age=age;
}
2)this();在构造方法里这样写表示调用本类其它的构造方法,必须放在此构造方法的第一行。
方法参数传递规则:(课堂代码:TestParameter.java)
简单类型 :传值,形参和实参各是一个数
对象类型:传引用,形参和实参指向同一个对象
8、面象对象的三大特性:封装,继承,多态
封装:(课堂代码:TestEncapsulation.java)
封装,一个对象和外界的联系应当通过一个统一的接口,应当公开的公开,应当隐藏的隐藏。
(对象的属性应当隐藏),一个对象的内部是透明的,就是把对象内部的可透明性和隐藏的特性区分开,该透明的透明,该隐藏的隐藏。
(封装的属性)java中类的属性的访问权限的默认值不是private,
要想隐藏该属性或方法,就可以加private(私有)修饰符来限制只能够在类的内部进行访问。
对于类中的私有属性,要对其给出一对方法(getXxx(),setXxx())访问私有属性,保证对私有属性的操作的安全性。
方法的封装,对于方法的封装,该公开的公开,该隐藏的隐藏。
方法公开的是方法的声明(定义),即(只须知道参数和返回值就可以调用该方法),隐藏方法的实现会使实现的改变对架构的影响最小化。
封装会使方法实现的改变对架构的影响最小化。
完全的封装,类的属性全部私有化,并且提供一对方法来访问属性。给自己用的方法要隐藏
Java Bean 一种组件规范 --> 所有属性私有,访问方法按照命名规范setXxx(),getXxx()方法
JavaScript只有封装,没有继承和多态
9、继承
继承,是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类事物的父类。父类的意义在于可以抽取多类事物的共性。
泛化:把共性从子类中抽取出来。先有子类后有父类叫泛化
特化:先有父类,再有子类的过程。先有父类再有子类叫特化
父类与子类 -> 从一般到特殊的关系
java中的继承要使用extends关键字,并且java中只允许单继承,也就是一个类只能有一个直接的父类。
这样就是继承关系呈树状,体现了java的简单性。
子类只能继承在父类中可以访问的属性和方法(实际上父类中私有的属性和方法也会被继承但子类中无法访问罢了)。
实际上一个子类对象中包含一个父类对象
访问控制修饰符:(可以修饰属性和方法)
private修饰符,表示只有本类内部可以访问,不能继承。
default修饰符,方法不加修饰符,会默认为default,表示在同一个包中可以访问,
父子类在同一包中,子类可以继承父类的相应内容。(可以修饰类)
protected(保护)修饰符,表示同一包中可以访问,不同包的子类也可以访问继承。
public修饰符,表示公开,在任何地方都可以访问,能继承。(可以修饰类)
修饰符的权限是由上而下逐渐变宽的。
继承的意义,就在于子类可以在父类的基础之上对父类的功能进行发展,继承可以使系统的耦合性降低,
也就是使对象间的联系便的松散,使多类对象间的联系用其父类对象代替。
注意:构造方法不能被继承。
父类的属性及方法的确定:要从子类的角度来看子类间的共性,当所有子类都有这个属性时,就应当考虑是否该放在父类中,
方法也是如此,方法可以被看作是对象的行为,而类的方法这时这一类对象所共有的行为,
所以也应当在方法的确定时注意是不是所有的子类型中都需要有这种方法,并且会根据不同的类型的行为的方式也不同才可以覆盖着个方法。