java是跨平台语言,什么是跨平台语言,就是不仅可以在windows操作系统运行,还可以在linux操作系统上运行,一次编写,到处运行。他运行在虚拟机上,windows执行的.EXE文件,java执行的.class文件,java语言简单,开源,而且是面向对象语言,而且他还有自己的垃圾回收器,不用考虑内存的问题。而且不像C++复杂,不仅要考虑指针还要考虑内存,Java支持多线程。
Java的核心思想体现在面向对象:
首先说说我所理解的面向对象,JAVA中万物都是对象,因为所有的类都继承Object,面向对象的核心思想体现在简单,你想要做什么事情,C++的是面向过程语言,
面向过程主要强调的行为动作;
面向对象主要强调的是对象实例;
对象将过程封装。我们从行动者变成指挥者。
比如说你想让贪官去吃屎,
咱们可以建立一个贪官的对象(实例)
1. 贪官 贪官1 = new 贪官(),
然后里面有一个吃屎的动作(方法,函数都行) ;
2.贪官1.吃屎();
但是这样没有扩展性,因为人们不仅讨厌贪官还讨厌城管啊专家啊,而且上面这个贪官也没有名字,也没有性别,上面都没有,因为贪官也是人嘛!我们可以创建一个Person对象,然后里面有name,age,sex这些属性,我们将这些属性进行封装,作用域为private(外部无法访问,只有本类可以访问),为了让外部修改或读取属性的信息,我们对外提供get,set方法,然后创建Person的构造方法,构造方法这个东西特别的实用:
public Person(String name,int age,String sex){
this.name= name;
this.age = age;
this.sex =sex;
}
这样我们在实例化一个对象的时候就不需要.set方法设置Person的属性了,这样减少了很多代码量。
我们把贪官啊城管啊什么的继承(extends)Person,这样我们实例化对象就可以直接在构造贪官的时候这样写:
为了方面我们打印,我直接在Person类中重写了Object的toString(),因为所有的类都继承Object嘛
我们现在举一反三,既然这里提到了重写,首先重写的必要条件就是有继承,贪官现在继承了Person,我们现在在Person类中添加一个eat()方法,public void eat(){};我们不需要返回值,然后贪官重写了eat()方法;打印的是今天吃的鲍鱼。
现在我们贪官类中没有吃屎的方法,因为大多数人都不应该吃屎,我们不应该在Person添加吃屎的方法然后让贪官重写,既然可以,我们可以定义一个接口(Interface)或者抽象类(abstract),里面定义一个吃屎的方法,然后让贪官去实现(implements)这个接口,重写这个方法。
这里提到了抽象类和接口我就说说他们的区别:
1.接口需要被实现,抽象类需要被继承,这句话的一件间接地表达了如果我们要实现多继承可以使用接口,扩展性强
2.接口中所有的方法都是抽象的,而抽象类中可以有普通方法,意思就是接口的方法需要全部实现,而抽象类只需要实现抽象方法就行。
3.接口中所有的成员变量(属性变量)都是static final的,而抽象类中可以有成员变量。
4.接口不能有构造方法,抽象类可以有构造方法。
面向对象的三大特征
封装:把属于一个对象的属性特征包装到一个类中,然后对外提供访问接口(方法)。打个比方,电脑的USB插口,可以插鼠标,键盘,U盘啊之类的,就相当于我们的鼠标,键盘,U盘都实现了我们电脑这个接口USB的方法。
继承:说的简单点,就是提高重用性,减少代码量,不过建议大家优先使用组合,因为继承太多了,关系复杂,不易于维护。
多态:多态我认为是面向对象中最有意思的了,首先说说多态的必要条件,必须要有继承或者实现接口,重写接口里的方法,父类引用指向子类引用,然后调用接口中的方法。Java中处处存在多态,比如:
//父类引用指向子类对象
List list = new ArrayList();
//这里Iterator是个接口,list.iterator()返回的是一个接口,就说明了ArrayList实现了这个接口
看过源码的朋友都知道其实ArrayList的父类AbstractList实现了这个接口,面向对象真是神奇无比啊!
简单点的意思就是iterator it = new AbstractList();
Iterator it = list.iterator();
这里面全是我的理解,我这个人是想到什么说什么的,也许有点乱,希望大家可以给出一些批评和建议,我一定会虚心接受。
---------------------------------------- android培训、java培训、期待与您交流! ------------------------------------