面试官问题:说下Java中类和实例的差别?
你的回答:类是抽象的,是对概念的归纳,而实例是具体的,能看得到摸得着的东西。
比如人类是类,张三李四是具体的一个个人类的实例。
通过如下的文章,你能对类和实例有更为具体的理解。
在同一个java文件里定义一个类到定义多个类对大家来说是个跨越,每当我在培训过程中讲到这里,总有同学会对此表示惊讶,因为在这之前,我们在java文件里只定义了一个类。
类可以反映现实生活中一些对象的特征,这些对象都有相同的属性定义和行为定义。在Java语言里面,我们可以通过关键字class定义一个类。比如,汽车有价钱的属性,有启动和刹车的行为,我们就可以为此定义Car类,代码如下。
1 class Car {
2 int price; //价钱属性
3 //启动方法
4 void move() {System.out.println("is moving");}
5 //刹车方法
6 void stop() {System.out.println("is Stopped");}
7 }
在其中的第2行,我们定义了价钱这个属性,在第4和第6行,定义了启动和刹车两个方法,通过下面的ClassDemo.java,我们来看下怎么使用这个Car类。
从第1到第10行,我们定义了Car这个类,请注意在第8行定义的toString方法里,我们返回了一个字符串。
1 class Car{
2 int price;
3 // 启动方法
4 void move() {System.out.println("is moving");}
5 //刹车方法
6 void stop() {System.out.println("is Stopped");}
7 //重新定义了toString方法
8 public String toString()
9 { return "This is my car."; }
10 }
11 //这个是主类
12 public class ClassDemo {
13 public static void main(String[] args) {
14 Car car = new Car();
15 car.move();
16 car.stop();
17 System.out.println(car);//This is my car.
18 }
19 }
在第12行里,我们定义了主类ClassDemo,主类名需要和Java文件同名。在主类的第14行里,我们通过new关键字创建了一个Car的实例,并在第15和16行里调用了move和stop方法。
我们在第1行通过class关键字定义的Car类叫类,这是个抽象的概念,存在于图纸上,对于这个抽象的类,是没有启动和刹车概念的。所以我们一般不会写Car.start();这样的代码。
在第14行new出来的car是叫对象,这是真实存在的汽车,针对这个汽车,我们可以通过踩油门来启动,也可以执行刹车操作,所以car.start()和car.stop()方法是有实际意义的。、
在17行,我们打印了car,这里会自动调用Car类的toString方法,会看到This is my car.这个输出。如果我们在Car类里去掉第8和第9行的toString方法,执行第17行的代码时,就会调用Object类里的toString方法,由于Object里toString方法是返回该对象的内存地址,所以我们能看到这样的输出:Car@20d10a。