最近,有人问到什么叫接口,在程序开发过程中,就是多个不断地调用接口完成一件件事情。按照我的理解,给他解释说,比如有一个大的苹果农场,在这个农场里面生产苹果,突然有个商人想获取苹果,商人不用关心苹果怎么生产的,农场主只需要给一个获取苹果的“通道”就可以,这个“通道”就可以称为一个接口,其中查看每个苹果的各个方面的指标,包含苹果的名称、种类、颜色,就是查看苹果属性,就可以将这些属性封装成一个对象,这就是今天详解的类。
1、 对象 (OPP)
对象,是一个类的实例。类,其实就是一个模板,类里面包含了对象的属性和行为动作,这几句话理解了很久,换句土话就是我有个苹果工厂(就是类),苹果厂里面可以有几种苹果(就是几个对象,其实你添加梨对象,就是名字),例如下面的代码:runoob这个网址形象画出了,就不盗图了,在此引用下地址,可以形象查看下
package JavaOPP;
public class Apple {
// apple name
private String name;
// apple kind
private int kind;
//apple color: red、green apple
private String color;
//The total number of apple
private int numbers;
//second object
class RedApple {
private String name;
private int kind;
}
private final int id = 3;
}
2、Set和Get方法,操作变量属性方法
苹果在创建以后,自然要将一些它的名字、颜色等属性设置下么,也就是对象有一些可以操作的方法,将变量进行初始化或者更改,所以也就存在了Set和Get方法了,如下:
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKind() {
return kind;
}
public void setKind(int kind) {
this.kind = kind;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getNumbers() {
return numbers;
}
public void setNumbers(int numbers) {
this.numbers = numbers;
}
public void setAppleName(String name) {
this.setName(name);
}
public String getAppleName() {
return this.getName();
}
通过这些方法,我们生成一个苹果,也就是一个对象的时候,可以用Apple.方法名称的方式,调用这些方法,当然这些方法都是public公共的,可以随意调用了。
3、公共方法域Public
很容易理解,当将方法名称设置为public时候,这个时候New Apple出来的对象可以调用任何public方法,也就是可以随意改变苹果颜色以及其它属性,好处方便,随意更改,不管在哪里引用,哪个类包里面生成对象,都可以引用。比如下图,在Main函数里面或者在AppleTest里面都可以任意引用,也就是你这个对象,只有被生成以后,就可以随意折腾了,愿意怎么改,怎么改,无所谓了。
4、保护方法域Protected
这个使用范围就缩小点了,也就是只能在同一个Package里面使用,能不能用测试下么。
先设置protected方法:
protected String getName() {
return name;
}
protected void setName(String name) {
this.name = name;
}
然后再AppleTest类里面测试下,能不能使用:
在Main类里面测试下,Main类是在包src里面:
看到在同一个Package里面是可以使用的,不同包之间无法使用的,一般来说这个修饰符很少使用,具体哪些情况使用,后期了解了以后,补下。
5、私有方法域Private
这个范围就更小了,只能在类内部使用了,直接测试代码:
private String getName() {
return name;
}
private void setName(String name) {
this.name = name;
}
这个能不能用,大家有时间自己测试下吧,其实只能自己类里面调用。应用时候呢,比如苹果生成以后,想看下这个苹果叫什么时候,我们可以写个函数,在类内部方法调用这个私有方法,这样别人改不了,只能看,所以大大保护了这个对象的某些属性,比如更常见的账户密码
public String getAppleName() {
return this.getName();
}
6、总结下三个方法的区域
看下截图,可以看出了,实际应用的话,看你喜好了么,哈哈,其实是看业务需求,具体实际情况实际出发。
7、final方法
final修饰的变量,在类中只能生成get方法的,也就是当我们确定一个变量值时候,实例化该对象,换句话说就是这个苹果从出生已经确定了名字了,那么我们就可以使用final修饰下,这样别人实例对象后,只能看该苹果名字,但不能换个名字再展示了。
还有static修饰符,代码如下:
private static int nextId = 3;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
System.out.println(nextId);
this.id = id + nextId;
nextId++;
}
public static void main(String[] args) {
Apple apple = new Apple();
Apple apple1 = new Apple();
Apple apple2 = new Apple();
apple.setId(1);
apple1.setId(1);
apple2.setId(1);
}
输出结果是:3,4,5。也就三个实例化对象共享了一个nextId,也就是C语言里面,所有对象指向同一个nextId变量地址,这样可以方便写一些计数方法,比如生成了多少个苹果了啊。
8、重载
重载,就是重新加载,怎么重新加载呢,就是在实例化一个对象的时候,我们可以设置不同的构造函数,当然可以构造函数不写也可以,这样实例化时候自动调用程序默认的,也就是Java自己生成的。重载功能,比如我们生成的苹果要在生成时候设置几个属性,那不同的种类设置不同属性啊,可能这个苹果现在是青色,但是我们生成一个苹果对象,后期还可以通过set方法继续修改下,有的只能生成种类,颜色不需要设置,那创建不同的构造函数,就是不同的记录方法,轻而易举的将这些实现了,如下代码:
public Apple(){
}
public Apple(int kind) {
this.kind = kind;
}
public Apple(String color ,int kind) {
this.color = color;
this.kind = kind;
}
在调用的时候,根据不同的记录方式,就是不同入参个数,自动定位到该构造函数,分分钟生成相对应的对象。
虽然很基础,但是谁不是在错误和不会中走过来么,轻松笔记,让自己更明白编程。