1.Java语言和C语言的区别

Java语言和C语言最大的不同在于Java语言是面向对象的,而C语言是面向过程的。比如下面的C语言伪码:

上面的伪码显示程序的main方法中调用了run和eat两个方法,而a,sex,float都是全局变量,所以调用run和eat两个方法之后,a和sex的值就永久发生了改变。这就可以把调用方法看作是一个个过程,这些过程把全局变量的值做出来修改。

然后我们再来看一段Java的伪代码:

不难看出Java多出了一个先创建对象的过程,我们先用Demo类创建出demo和demo1两个不同的对象,再用对象名调用方法,这一过程的结果是demo的a和sex两个变量的值发生了改变,但是demo1的值并没有变化,所以说Java语言是面向对象的,调用方法的过程只针对当前的对象。

这里要注意static关键字,static修饰的代码属于类 ,非static修饰的代码属于对象。

2.类和对象

接下来我们更全面地讲解一下类和对象:
类是创建对象的模板,一个类可以创建多个对象。
创建一个对象的语句是Demo demo = new Demo();其中new关键字代表在堆当中开辟内存,Demo() 指的是类中的构造函数,调用构造函数用来创建对象,Demo指数据类型,表示数据在内存当中的存储形式,demo指对象名,同时也是变量名称。

在Java的内存中,调用方法的过程是先让方法入栈,调用完之后出栈,其中创建出来的对象储存在堆里面,其中对象的变量存在堆里,对象的方法存在方法区里,然后堆里有指向对象方法的地址,类信息储存在方法区里面。


3.继承

继承的本质就是代码的复用,子类继承了父类之后,可以使用父类中用public和protected关键字修饰的代码,例如下面这一段伪代码:

Demo继承了Animal类,Demo是子类,Animal是父类,创建子类对象时,Java是先会创建父类再创建子类的,demo这个对象可以使用a,sex,f以及父类的height这些变量,可以使用run,eat,flay这三个方法。

如果子类对父类的方法进行了重写,那么创建出来的子类对象调用这个方法时,调用的是重写后的方法,而不是父类的方法。用父类创建出来的对象不能使用子类独有的变量和方法,并且调用被重写的方法时,调用的是旧方法,不是被重写的方法。

理解重写和重载的区别非常重要:重写指子类重新实现父类中已有的方法,方法名、参数列表、返回值类型必须与父类完全一致。重载指在同一个类中,存在多个方法名相同但参数列表不同的方法(参数类型、个数或顺序不同)。

4.多态

先看下面这一段伪代码:

关键在于这一句代码Animal animal = new Demo();虽然创建了父类和子类对象,但是Animal数据类型限制了我们只能调用父类的数据,以及子类重写的父类的方法,父类的引用指向了子类的对象,这就是多态。

多态还是只能使用父类的变量和方法,只不过多态在调用时方法时,如果被调用的方法在子类里被重写过,那么多态调用的这个方法会执行被重写后的代码,而不是父类里的旧代码。

比如图中代码里的flay方法,子类继承了父类之后对flay进行了重写,所以animal.flay();这个语句执行后的结果是“Demo能飞”,调用的是重写后的内容。jump方法没有被重写,所以调用之后输出结果还是“动物能跳”。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐