面向对象程序设计: 面向对象是Java语言的基本设计思想,类是Java中最核心的最基本的内容。 面向对象的思想是基于一整套理论体系构成的,利用封装、继承、多态等方法来实现代码的重用,减少程序错误,进而降低软件开发的工作量。 1:类 类是Java语言的基础,任何的操作都要在类中完成,如方法、构造函数、参数的传递等。类是Java中定义的一个模板。 类的一般形式: class 类名{ 类型 变量名; ... 类型 方法名(参数){ 方法内容; } } 声明类时,可以用的修饰符:private(只在本类中可见); protected(本类或同一包中可见); public(任何类都可见); 默认(本类或同一包中可见) 声明变量时,可以用的修饰符:private(只在本类中可见); 声明方法时,根据有无返回类型可以用void来修饰; 主方法:程序的入口.格式如下: public static void main(String[] args){ } 构造方法:在程序中创建对象时,需要清除或修改其属性的值,将以前的运算数据都清除掉,用构造方法来初始化参数。 类中没有提供自己的构造方法,在编译时,编译器就会为这个类添加一个构造方法。 构造方法的名称必须要和类的名称相同,并且没有返回值。 构造方法必须放在方法的开始位置。 初始化的结果是数字变量全都设置为0,布尔类型值为false, 对象变量为null; 构造方法可以带参数,如果不希望在类中对属性进行初始化,加上参数,并通过有参构造方法将值传递给各个属性。 构造方法根据参数可以有多个,但方法名字一样,参数的顺序或多少不能相同。 成员变量:在类中定义,共享的,类中的方法都可以使用成员变量。成员变量又称为全局变量。 语法: 变量修饰符 类型 变量名; 其中 类型可以是任意的数据类型,也可以是数组或类。在一个类中,成员变量是唯一的,但成员变量的名可以和类名相同。 变量修饰符可以使用private、protected、public、default 还可以使用static,在静态方法中使用的变量必须要使用static进行修饰,还可以使用final关键字,这样变量就会变成常量,一次赋值后,不允许被修改。 局部变量:在方法中定义和使用的,使用范围仅限于所声明的方法内。不同方法内所定义的变量名可相同,变量的类型可以不同。 this关键字:使用this可以不通过对象引用成员变量和方法。一般情况this可有可无,但如果成员变量和方法中的参数名相同,this就很重要了。 2:对象 创建对象: 类名 对象名 = new 类名(参数列); 对象属性和方法的访问: 通过在对象实体后加"."来调用类中定义的可访问的属性和方法; 对象的比较:用“==”判断的是二者是否为同一个对象,对内存中的地址是否相同; 用equal方法来比较,是对比的内容,值相同就行。 销毁对象:System.gc(); Java有垃圾回收机制,程序员可以不考虑。
继承:
是指若一个类从另一个类派生而来,派生类自动具有了被继承类所有的特性,实现了类的扩展,被继承的类被称为“父类”、“超类”、“基类”,继承父类的就叫做”子类“,“扩展类”、“派生类”;使用继承可以使得子类具有父类的各种属性和方法。从而不需要再次编写相同的代码,促进软件的复用,并且集成的形式是可以更加复杂的。有单一继承和多重继承。
实现继承:也就是创建一个类的子类,在类的声明中加入extends子句。
<修饰符> class <子类名> extends <超类名> {
//实现代码
}
子类的名可以由用户在符合标识符的命名规范下随意定义,一个子类只有一个父类,但子类无法继承父类中使用private修饰的类成员。
单一继承:一个类只继承一个直接父类,
多重继承:一个类只可以继承一个父类,只有单一继承,没有多重继承,但可以通过实现接口的方法来达到多重继承的目的。
抽象类abstact:类中只包含对方法的声明而没有具体的实现。
抽象类至少含有一个抽象方法,
继承抽象类的子类必须实现其所有抽象方法才能被实例化,否则子类还是抽象类。
抽象类中的方法需要声明方法的名称,但不用指明方法体。对问题域进行分析和设计,得出抽象的概念时,可以使用抽象类。
抽象类要比类的继承更加高级一些,是对类的抽象。
抽象类拥有未能够实现的方法,而且不能够被实例化,只能被继承扩展。
语法:
abstact class ClassName{
abstract Return abstractMethodName(paramList);
//其他方法代码
}
关键字final:
成员变量被final修饰的话,成员变量就变成了一个常量,只能被赋值一次,可以不在声明时赋值,但需要在构造函数完成之前保证这个变量有值
方法被final修饰的话,该方法不能被重写,这样有了比较高的安全保证。
类被final修饰的话,这个类不能被继承。只有当该类中的所有方法都不需要重写的时候,才能将该类定义为final类。
Object类:是一个特殊的类,是所有类的祖先类。
Object对象:定义一个Object类型对象的数组,根据继承,可以放置任何的类型,可以将几个不同的对象放置到Object数组中,但是放置进去后,对象的类型就会被丢弃了,在取出后需要进行类型的转换。
重写equals方法:Object中对equals的定义如下:
public Boolean equals(Object obj){
return(this == obj);
}
这样,如果两个对象指向同一个对象(在同一个内存地址上),就会返回true,
重写toString方法:默认返回是对象的地址。可以覆盖toString方法来实现用户所要输出的内容。
多态:
重写:子类继承父类后,父类中某一方法不能满足新的要求,可以在子类中修改从父类继承过来的没有被private修饰的方法,并可同时定义自己的方法。
重写的目的:修改父类的方法、对父类的方法进行扩展、可以在子类中定义具体的特定的行为。
重载:指在同一个类中有两个或更多个方法可以使用一个相同的名称,不同的是它们的参数,只要参数不同,方法名桢是没有问题的。
绑定:在对象引用与对象实例之间建立联系。
静态绑定:前期绑定,在编译期建立的联系,决定变量的值或应调用哪个类的方法。性能好,提高代码的运行速度。
属于静态绑定内容有:类属性、构造方法、声明为static的静态方法、声明为final的方法、使用关键字super调用的方法,包括super()。
动态绑定:后期绑定,在运行期建立的联系,根据对象引用所指向的具体实例决定执行什么样的方法,由于是在运行时由JVM完成的,因此会减慢程序运行速度。
动态绑定的好处是提高了程序设计的灵活度,降低了耦合性,
动态绑定的过程:虚拟机提取对象的实际类型的方法表;虚拟机搜索方法签名;调用方法。
接口interface:
为解决无法实现多继承而提供的一个解决方案。接口中并没有实际的方法实现,只定义了一些空壳,一个类可以通过实现接口来实现多重继承关系。
接口是一系列抽象方法和常量的属性集合,不能有变量,所有的方法必须为抽象方法,不能提供具体的方法实现。
一个类实现了接口,就必须实现接口中所定义的所有方法,而且一个类可以实现多个接口。
接口是一个类的框架,是一种完全形式上的抽象类。
定义接口:
修饰符 interface 接口名 {
//接口内容
//声明变量
数据类型 变量名;
抽象方法;
......
//声明方法
返回值类型 方法名();
......
}
注:接口的修饰符只有两种:默认无修饰符(所在包之内的类可见)和public(任何类都可见可用)两种。
接口的名称设定需要满足Java标识符的规定
接口定义的方法都为抽象方法,被自动设置为public的。
实现接口:就是实现接口中所定的所有抽象方法,
class 类名 implements 接口1,接口2{
方法1(){
//方法体
}
方法2(){
//方法体
}
}
注:由implements来表示实现接口,多个接口用逗号隔开。
必须遵守重写的所有规则
保持相同的返回类型。
接口的引用:
建立接口类型的引用变量,接口的引用变量可以存储一个指向对象的值引用,而这个对象可以是任何的实现该接口的实例,对象的方法必须是类中的非抽象方法。
内部类:
定义在类内部的类,通过内部类的定义,程序员将一些逻辑上相关的类组织在一起,并通过内部类的使用可以很好地控制内部类的可见性。
一个类嵌套定义在另一个类中,这个叫内部类,包含内部类的类称为外部类,对外部类来说,内部类相当于成员变量或方法。