1.面向对象
面向对象有三个要素,封装、继承、多态。
(1)类与对象,类把一些具有相同属性封装成一个类,对象是类的实例,类的具体实现形式。
(2)抽象类与接口,抽象类,只有抽象方法,没有具体的实现细节,需要继承去实现具体细节。接口是比抽象类更抽象,只有公共的方法,没有具体的实现细节。
(3)多态、重载、覆写,多态是类有不同的方法,比如,人有各种各样的人,重载,是方法名相同,参数不同,根据参数来选择方法,覆写是子类覆写父类的方法,改进方法。
2定义类的格式、实例变量与局部变量
class Student{
代码
}
注意类名中单词的首字母大写。
实例变量:定义在类中但在任何方法之外。
局部变量:定义在方法之中的变量。
局部变量要先赋值,再进行运算,而实例变量均已经赋初值。这是局部变量和实例变量的一大区别。
实例变量的对象赋值为null。
局部变量不允许范围内定义两个同名变量。实例变量的作用域在本类中完全有效,当被其他的类调用的时候也可能有效。
实例变量和局部变量允许命名冲突。
书写方法的格式:
修饰符 返回值 方法名 调用过程中 方法体可能出现的例外
publicint/void addNumber(参数) throwExcepion {}
例:
public intaddNumber(int a,int b){
}
注:方法名中的参数int a,int b为局部变量
3.构造方法
类方法中的一类特殊方法:构造方法。构造方法是当用类生成对象时,系统在生成对象的过程中利用的方法。
注意:构造方法在生成对象的时候会被调用,但并不是构造方法生成了对象。
构造方法没有返回值。格式为:public 方法名。
构造方法的方法名与类名相同。构造方法是在对象生成的过程中自动调用,不可能利用指令去调用。
在一个对象的生成周期中构造方法只用一次,一旦这个对象生成,那么这个构造方法失效。
用类来生成对象的语句:
Student s=newStudent()。
第一个Student表示这是用Student类进行定义。“Student()”表示调用一个无参数的构造方法。
如果()中有参数,则系统构造对象的过程中调用有参的方法。此时S称为一个对象变量。
Student s的存储区域存放的是地址:一个对象在硬盘上占有一个连续地址,首地址赋予s空间。
S称为对象Student的引用。
注意:在对象变量中存放的是引用(地址);在简单变量中存放的是数值。
可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法:
publicstudent(string name,int a){
}
publicstudent(int a,string name){
}
3.重载与覆写
(1)重载
Overloading在一个类中可以定义多个同名方法,各个方法的参数表一定不同。但修饰词可能相同,返回值也可能相同。
构造方法也可以实现overloading。例:
public voidteach(){};
public void teach(inta){};
(2)覆写
子类覆写了父类的方法
4.继承
父类(SuperClass)和子类(SonClass)。
父类的非私有化属性和方法可以默认继承到子类。
Class Sonextends Father{
}
而如果父类中的私有方法被子类调用的话,则编译报错。
父类的构造方法子类不可以继承,更不存在覆盖的问题。(非构造方法可以)
如果子类访问父类的构造方法,则在编译的时候提示访问不到该方法。
JAVA中不允许多继承,一个类有且只有一个父类(单继承)。
5.InstanceOf
Instanceof一般用于在强制类型转换之前判定变量是否可以强制转换。
6.修饰符
(1)static
static:①可修饰变量(属性);②可修饰方法;③可修饰代码块。
Static intdata语句说明data为类变量,为一个类的共享变量,属于整个类。Int data为实例变量。
静态方法不需要有对象,可以使用类名调用。
静态方法中不允许访问类的非静态成员,包括成员的变量和方法,因为此时是通过类调用的,没有对象的概念。This.data是不可用的。
一般情况下,主方法是静态方法,所以可调用静态方法,主方法为静态方法
(2)final
final可以修饰类、属性、方法。
当用final修饰类的时候,此类不可被继承,即final类没有子类。这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生。
当利用final修饰一个属性(变量)的时候,此时的属性成为常量。
(3)abstract
Abstract(抽象)可以修饰类、方法
如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。
Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。
Abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。
Final和abstract永远不会同时出现。
当abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。
注意比较:
private void print(){};此语句表示方法的空实现。
Abstract void print(); 此语句表示方法的抽象,无实现。
7.接口
接口与类属于同一层次,实际上,接口是一种特殊的抽象类。
如:
interface IA{
}
publicinterface:公开接口
与类相似,一个文件只能有一个public接口,且与文件名相同。
在一个文件中不可同时定义一个public接口和一个public类。
一个接口中,所有方法为公开、抽象方法;所有的属性都是公开、静态、常量。
一个类实现一个接口的格式:
class IAImpleimplements IA{
};