一.面向对象的基本概念
1.类与对象:
对象是客观事物的抽象,类是对对象的抽象。对象是类的实例,类是对象的模板。
类由属性和方法构成:
对象的特征在类中表示为成员变量,称为类的属性。
类的方法是对象执行操作的一种规范。方法指定以何种方式操作对象的数据,是操作的实际实现。
(1)类声明
[访问符] [修饰符] class <类名>{
//1.成员变量声明
//2.构造方法
//3.成员方法
}
成员变量
(1)变量的访问修饰符:pubic修饰的变量是公共变量;protected修饰的变量是保护变量;private修饰的变量是私有变量。
(2)变量用static修饰的则称为静态变量(类变量)。没有static的为实例变量。
构造方法
构造方法也有名称;参数和方法体
(1)构造方法的名称必须与类名相同。
(2)构造方法不能有返回值,也不能返回void。
(3) 构造方法必须在创建对象时用new运算符调用。
成员方法
成员方法的定义必须在类体内,不能定义在类体外。
格式:访问权限 返回值类型 方法名([形式参数])
(1)对象的创建
要获得一个类的对象一般需要两步:
1.声明该类类型的一个变量。
2.创建该对象(即在内存中为该对象分配地址空间),并把该对象的引用赋给声明好的变量。这是通过使用new运算符实现的。
(2)对象与对象之间是通过消息传递的。
(3)一个对象发送的消息包含三方面的内容:接收消息的对象;接收对象采用的方法(操作);方法所需要的参数。
this对象的使用
this关键字代表当前所在类的对象,即本类对象,用于解决变量的命名冲突和不确定性问题;在没有同名的情况下,可以直接使用属性的名字。
二.面向对象基本特征
1.封装
定义
封装就是把对象的属性(状态)和方法(行为)结合在一起,并尽可能隐蔽对象的内部细节,成为一个不可分割的独立单位(即对象),对外形成一个边界,只保留有限的对外接口使之与外部发生联系。
原则
使对象以外的部分不能随意存取对象的内部数据,从而有效的避免了外部错误对它的“交叉感染”。
数据隐藏特性提升了系统安全性,使软件错误能够局部化,减少查错和排错的难度。
2.继承
被继承的类叫父类或超类,继承父类的类叫子类或派生类,在Java中,关键字“extends”表示继承,后面紧跟父类的类名。(是在已有类的基础上生成新类的过程)
public class Person {
private String name;
private int age;
private String gender;
}
class Teacher extends Person {
private float salary;
private String department;
}
class Student extends Person {
private int[] score;
private String grade;
}
3.多态
可以总结为同一类对象表现出不同的行为。而且分为静态多态和动态多态。
三.方法重载
所谓方法重载,就是在一个类中,方法名字相同,而参数不同。
方法的重载规则:
1、方法名称必须相同。
2、参数列表必须不同,其中可以包括参数个数不同,参数类型不同、参数顺序不同等。
3、无法以返回值类型作为重载函数的区分标准。
4、被重载的方法可以改变访问修饰符。
注意:返回值不影响方法重载。构造方法也可以重载 。
四.方法重写
重写(override):也称覆盖。重写是子类对父类非静态,非private,非final方法的实现过程进行重新编写,返回值(JDK7以后,被重写的方法返回值类型可以不同,但是必须是具有父子关系的)和形参都不能改变。即外壳不变,核心重写。
【方法重写的规则】:
1).子类在重写父类的方法时,一般必须与父类方法原型一致:修饰符 返回值类型 方法名(参数列表)要完全一致。
2).JDK7以后,被重写的方法返回值类型可以不同,但是必须是具有父子关系的。
3).访问权限不能比父类中被重写的方法的访问权限更低。
4).父类被static、private final修饰的方法不能被重写。
5). 重写和重载的区别
(1).重载
重载的参数列表是必须修改的,而返回值类型,访问限定符是可以修改的重载是静态绑定,即在编译时就根据实参类型确定了调用哪个方法。
(2).重写
重写的参数列表,返回类型(可以是兮子米) 访问限定符(不能更严厉),一般是不能修改的。
重写是动态绑定,即在编译时不能确定具体的调用方法,而在程序运行时,才能确定具体的被调用的方法。
即:方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
6). 类的每个实例都能访问这个类的静态变量和静态方法。为清晰起见,最好使用“类名.变量’和“类名.方法”来访问静态变量和静态方法。
7). 实例变量的初始化顺序是在声明时初始化、使用初始化块初始化、使用构造方法初始化。静态变量的初始化顺序是声明时初始化、使用静态初始化块初始化、使用构造方法初始化。
8). 当一个对象不再被使用,系统自动调用后台垃圾回收器销毁对象,也可以调用System.gc0方法或Runtime实例的 gc0方法强制执行垃圾回收器。但这些方法都不保证系统立即回收无用对象。
9). 包是实现类的组织和命名的一种机制,可以将相关的类组织到一个包中,需要时使用import 语句导入。