"Anything is Object"----万物皆对象!!!
所以程序员一定不能说自己是“单身狗”,“圣斗士”and so on.如果程序员说类似的话,只能说明:面向对象的理解还不到位啊。废话到此为止,现在我们来谈一下老生常谈的”面向对象“:
我们都知道面向对象的四大特征(别吐槽,三大特征也不错):抽象、封装、继承、多态;
面向对象的基础就是类(class),类是对象的模板(理解:动物是一个类,而狮子就是一个对象);
类由属性和行为组成;
1.抽象:把具体的事物抽象成一个类的过程(找出共有的属性和行为的过程);
2.封装:把相同属性和行为组合成一个类的过程;
举个例子:我们把美国,俄罗斯,德国,中国都看做是国家的过程------------抽象;
凡是国家都有国旗,语言,首都,都会打仗。
public class Country{
//属性
private String flag;
private String captical;
private String language;
//行为
public void fight(){
System.out.println("保家卫国");
}
}
我们将我们理解的属性和行为写成上述代码的过程--------封装;
其他诸如构造函数,new 对象的讲解请自行Google,或者问度娘,这里不再阐述。
--------------------------------------------------------------------------------------------------------------------
成员:类的属性和行为统称为类的成员;
类的属性-----成员变量;
类的行为-----成员函数;
这里来讨论一下我们在编程过程中容易混淆的地方:
1.访问权限限定符:
java中一共有四种访问权限限定符:public 、private、protected、默认(即我们没有写前三者的情况):
范围 | public | protected | private | 默认 |
同类 | 可见 | 可见 | 可见 | 可见 |
子类同包 | 可见 | 可见 | 可见 | |
子类非同包 | 可见 | 可见 | ||
非同包 | 可见 |
public------完全没有限制;
默认--------相同包下面可以访问;
protected--继承关系下可以访问;(protected关键字用于在继承时控制可见性)
private-----只有本类中可以访问;
这里给出一些建议:
1.不希望外面能够访问的,我们用private;
2.希望在继承关系下可以访问的,我们用protected;
3.任意可以访问的,我们用public;
4.跨包不能访问的,我们不声明权限,即用默认的;
千万要注意:不写权限修饰符和public是有差别的;
2.关键字final和关键字static
(1)static关键字
static关键字是表示静态的;
static声明的成员是属于整个类的,而不属于某个对象;
static修饰的成员和类的生命周期相同(共存亡);
所以static修饰的成员加载优先于普通成员;
用法:
1.当需要记录类的状态时,可以使用静态变量;
2.当类所实现的功能和具体的对象无关时,可以使用static方法;
3.static修饰的方法只能访问static修饰的成员;(从加载顺序上面考虑问题)
4.static成员的两种访问方式:
a.类名.static成员;(这里要注意,不是所有static修饰的成员都可以直接用这种方式访问,它也受访问权限的制约)
b.对象.static成员;(不建议使用)
(2)final关键字
final的英文意思是:最终的,不可变的;final可以用来修饰类,方法,变量;
final修饰的类-----------该类不可以被继承;
final修饰的变量--------变量值不可以被修改;
final修饰的方法--------该方法不能被重写(覆盖);
总结:static不可以用来修饰类class,而final可以来修饰类;
类的修饰符只有三种:public,final,abstract,当然也可以不写
3.this关键字和super关键字
this关键字表示本类的;
super关键字表示父类的;
需要注意的一点是:他们需要写在第一行;(详情自行搜索,可以留言)
5.重载(overload)和重写(override)
(1)重载的来源是构造函数,因为构造函数的名字必须和类名相同,所以引出了重载的概念;
对于重载,我们只需要知道以下几点即可:
1.重载跟函数的返回值无关;
2.重载的参数不同(类型不同,个数不同,顺序不同)
3.函数名必须相同;
4.也可以用在继承关系中;
(2)重写
重写主要用在继承里面,实现多态功能的;
重写的条件:
返回值,方法名,参数都必须相同;
两者的对比:
重载只要方法名相同,其他都不同;
重写要求返回值,方法名,参数都必须相同;
6.成员变量和局部变量
成员变量:定义在类中,方法和块之外的,属于整个类,
局部变量:定义在方法中和块中;
两者最大的差别就是,成员变量可以不进行初始化,JVM会自动为其提供默认值;而局部变量不可以;
7.继承:java是全继承,除了构造函数之外;
父类的私有成员也可以继承但不可访问;
为了巩固上述内容,下一篇文章来加强学习。
若文中有不妥或者错误之处,抑或需要交流帮助的,都可以留言,不吝赐教!!!