一、类与对象
把有相似属性的实物进行抽象描述的就是类。把类中属性具体化的就是对象,对象是类的实例化。
类有属性、方法,将这些具体化之后,就成了对象。
例如,有一个电脑的类,包含有CPU、显卡、内存、硬盘、鼠标、键盘、屏幕、品牌等等的属性,还有开机、关机、放歌等等的方法。电脑该有的都有,但是他并不能指向某一台具体的电脑,他的描述都是抽象的。只有当这些描述具体话的时候,才称为对象,比如i7的处理器,8G内存,4G显存,NVIDIA GeForce GTX 960M的显卡,1TB的硬盘,联想的品牌等等,这样就能具体的指向了某一台机器。这就是类的实例化。
二、类的定义方法
在Java中,采用“访问修饰符 class 类名”的方式定义类,并在接下来的大括号中书写类的属性和方法。
例如
public class Computer {
private String CPU;
public int hardDisk;
public void power(){
System.out.println("computer start");
}
}
在这个电脑类中,使用public定义为公有的,Computer为类名,他包含有私有的属性CPU和公有的属性hardDisk。还有一个公有的方法power()。(值得注意的是,一般约定类名的首字母大写;变量名的首字母小写,之后每个单词的首字母大写以示区分)
三、类的实例化
类通过“类名 对象名称 = new 类的构造函数()”来实例化。
比如上面的电脑类,实例化的代码是
Computer cpt1 = new Computer();
实例化之后,就可以通过“cpt1.”来调用方法和修改属性,比如调用power方法,是“cpt1.power();”。CPU是私有的属性,不能直接通过“cpt1.CPU”来调用,只能通过在类周六定义方法来修改他的值。hardDisk是公有的属性,在外部可以直接通过“cpt1.hardDisk”来修改值。
类的对象也能作为参数定义,在定义参数时参数列表里面写“类名 对象名”,在传递参数时,直接填写要传递对象的对象名就可以已对象为参数进行传递。
四、类的构造方法
类的构造函数是用来在创建对象的时候,进行实例化的方法。构造方法在对象创建的时候,对对象的属性赋初值。
若不写构造方法,则系统会默认一个缺省的构造方法,例如:
public class Computer {
public Computer(){}
}
在构造方法中,可以对属性赋初值,可以在参数列表中定义参数,可以通过定义不同的参数,对构造方法进行重载,以实现对于不同对象的实例化需求。用户自己定义了构造方法之后,会覆盖掉默认的构造方法。
public class Computer {
private String CPU;
private int hardDisk;
public Computer(){
System.out.println("This is a Computer.");
}
public Computer(String CPU,int hardDisk){
this.CPU = CPU;
this.hardDisk = hardDisk;
System.out.println("This is a Computer.");
}
}
若在构造方法中调用构造方法,使用this。下面这段代码调用第一个构造方法后,会调用第二个构造方法,给属性x和y附上相同的值
public class Point {
private int x,y;
point(int x){
this(x,x);
}
point(int x,int y){
this.x = x;
this.y = y;
}
}
Java中有4种访问修饰符,分别是:public、protecte、friendly(default)、private,分别是公有的、受保护的、友元的(缺省的)、私有的。4种修饰符的权限依次递减。
访问控制修饰符可以用来修饰:属性、方法、类
public是公有的,一般把需要外部访问的方法定义为公有的,这个成员可以被所有的类访问。
prodecte是受保护的,被定义为受保护的成员后,这个成员可以被相同包中的类访问,和其他包中的子类访问。
friendly(default)是友元的(缺省的),不写访问控制修饰符的时候,成员就会被定义为缺省的。这样的成员只能被相同包中的类访问,其他包中的子类也不能访问缺省的成员。因此,这个又被成为包访问控制。
private是私有的,私有的成员只能被自己类的成员访问,且私有的成员不会被继承。构造方法也可以定义成私有的,然后通过其他成员方法调用,实现单例模式。