达内java学员分享:面向对象的编程就是在创造世界
之所以复杂更多来源于未知,就如不懂技术的人,看起代码来就像看天书,其实真正学习技术的人,他们的学习过程是很有趣的,达内java学员小曹用亲属关系和生活中通俗易懂的例子解读了面向对象的编程,把抽象的代码具体化,他把面向对象的编程解读为创造世界。小曹到达内学习java一个月了,刚刚学完面向对象,他以形象的类比方法写出了自己对面向对象的理解,对于还在学习java的人可能有很好的帮助。
【达内java学员毕业合影】
小曹表示听了达内老师讲的实例化世界,顿时茅塞顿开,感悟到原来我们理解的世界在计算机中也有同样的映射。首先计算机中底层实现是二进制的一堆数字,在向下是有无点信号,其实电脑他就是机器,没有自己的思想我们利用语言来控制cpu发送信号、调用内存,实现我们需要的功能。当面向对象出现以后,计算机语言变得多姿多彩起来,java是面向对象语言的代表,它给JVM命令,JVM翻译给操作系统听,所以可以实现一次编译,到处运行,也就是跨平台。java最大的特点就是面向对象,电脑其实是没有思维的,我们用语言结构让他变得聪明。其中面向对象就是让电脑模拟现实,我们都知道编程的过程就是在模拟现实。现实生活中有形形色色的对象,他们都有一个父类就是东西,而java中也有这么一个类叫做Object类,他被所有的类直接或间接继承。
1. 继承
现实生活的继承就是亲属间的继承,大部分与财产脱不了干系,在java中也是如此。只不过java中财产可以分成无数份,不会出现宠爱某一个孩子就多给点的现象,java中是对于子类都是平等对待的,并不会厚此薄彼只要是(protect权限以上的)属性和行为都可以给任何子类的任何对象。
在java中继承的作用,你可以这么想,父类的东西子类可以使用,因为这是子类所共有的属性和行为,但是每个子类也会有自己的行为,假如没有父类的概念,老师和学生都能吃饭、睡觉、呼吸...但是老师可以教书,学生可以学习。我们在声明老师类和学生类的时候是不是要把吃饭、睡觉、呼吸着这些共同的属性和行为写两次,这就是父类的第一个大作用实现代码重用。而且继承以后子类也可以重写这些方法,也可以添加自己独特的行为和属性,但是有单继承的局限性,这个时候就应该想到接口,接口就是可以实现多个,也就是实现一个教师类既可以是人,他可能是程序猿,还可能是工程狮,这就是接口的功能。还有一个小知识点.就是一个接口可以继承多个接口,其实现实意义不难想,接口是功能,我既能睡觉,也能吃饭,还能谈恋爱。下面是接口多继承的代码,另外继承还有传递性,就是一个子类被继承后的类,我叫他们孙子类,孙子既有爸爸(这个子类)的属性和方法,也有爷爷(这个子类的父类)的属性和方法。
interface Inter1{
public static final int NUM=5;
void a();
}
interface Inter2{
void b();
void c();
}
interface Inter4 extends Inter2,Inter1{
}
2. 封装:
关于封装你可以把它理解成是一个黑盒子,里面装着一些不为人知的东西,但是这个黑盒子有自己独特的功能。现实生活中也有这样的例子,例如手机就是一个黑盒子,而且功能很强大,但是我们不知道它这些功能具体是如何实现的。在面向对象中可以分为三个方面来对封装作出解释:
(1)封装对象的具体属性和方法,我们可以利用对象来干很多事情,但是我们不知道它怎么实现的,其目的就是保护对象。
(2)目的是增强安全性,让使用者不必了解具体的实现细节,使用特定的访问权限使用类的成员方法,成员变量...
3.多态:
多态是面向对象的三个特征之一。
1)多态的意义:
1.1)同一类型的引用指向不同的对象时,有不同的实现
---------cut()、run()-----行为的多态
1.2)同一个对象被造型为不同的类型时,有不同的功能
---------我、水---------对象的多态
2)向上造型:
2.1)父类型的引用指向子类的对象
2.2)能向上造型的类型有: 父类、所实现的接口
2.3)能点出来什么,看引用的类型
3)强制类型转换,成功的情况有两种:
3.1)引用所指向的对象,就是该类型
3.2)引用所指向的对象,实现了该接口
概念有点抽象,关键我们要理解它的使用。具体什么时候使用多态呢?其实在实例化抽象类和接口的时候一定要用多态的向上造型,当然还有不同子类实现同一行为的时候,这个时候一般在方法中传递的参数就是父类的对象,这样就是一个隐式的向上造型,例如打飞机判断子弹是否打中的hit方法,示例代码如下:
public boolean hit(FlyingObject obj) {
int x = this.x + this.width / 2;
int y = this.y + this.height / 2;
int x1 = obj.x - this.width / 2;
int x2 = obj.x + this.width / 2 + obj.width;
int y1 = obj.y - this.height / 2;
int y2 = obj.y + obj.height + this.height / 2;
return x > x1 && x < x2 && y > y1 && y < y2;
}
那么在现实生活中如何解释向上造型呢?可以比作我们喝东西这个行为,我们每天都在做,但是我们喝的东西不确定,白开水、汽水、啤酒、白酒...都有可能。我现在想知道你昨天喝的是啥,然后我去买一瓶,首先我写一个drink();参数暂且没有,那么我是不是要写好多个判断才可以知道你昨天喝得到底是啥?我也可以这样写方法,drink(喝得东西 喝得东西1)把你喝得那个东西给我传过来。我今天喝得东西=喝得东西1(也就是你昨天喝得东西);也就是白开水、汽水、啤酒、白酒都可以当作喝的东西这个类的对象,这就是一个向上造型的实例,也就是喝得东西1->白开水,喝得东西1->啤酒,喝得东西1->汽水。如果指向不同,是不是我今天买的东西就不一样,这就是多态的第一种意义:同一类型的引用指向不同的对象时,有不同的实现行为的多态。多态的第二种意义:同一个对象被造型为不同的类型时,有不同的功能。可以举个这样简单的例子:我是一个男人的实例化对象,同时我还是达内学员的一个实例化对象,然后我是一个男人,所以只要我正常的话就不穿裙子,另外,我还是达内的学员,我能在达内听课,我被造型了,不同的类型有不同的实现,这就是对象的多态。当我们在搞一个面向对象项目的时候就是在创造一个小世界,包括人际关系、各种行为,还可能抛异常。所以我想面向对象就是在创造世界,因为面向对象就是现实生活的映射。
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!
Java开发高端课程免费试学
大咖讲师+项目实战全面提升你的职场竞争力
- 海量实战教程
- 1V1答疑解惑
- 行业动态分析
- 大神学习路径图
相关推荐
更多2022-03-11
2021-03-24
2020-07-22
达内就业喜报
更多>Java开班时间
-
北京 丨 11月27日
火速抢座 -
上海 丨 11月27日
火速抢座 -
广州 丨 11月27日
火速抢座 -
兰州 丨 11月27日
火速抢座 -
杭州 丨 11月27日
火速抢座 -
南京 丨 11月27日
火速抢座 -
沈阳 丨 11月27日
火速抢座 -
大连 丨 11月27日
火速抢座 -
长春 丨 11月27日
火速抢座 -
哈尔滨 丨 11月27日
火速抢座 -
济南 丨 11月27日
火速抢座 -
青岛 丨 11月27日
火速抢座 -
烟台 丨 11月27日
火速抢座 -
西安 丨 11月27日
火速抢座 -
天津 丨 11月27日
火速抢座 -
石家庄 丨 11月27日
火速抢座 -
保定 丨 11月27日
火速抢座 -
郑州 丨 11月27日
火速抢座 -
合肥 丨 11月27日
火速抢座 -
太原 丨 11月27日
火速抢座 -
苏州 丨 11月27日
火速抢座 -
武汉 丨 11月27日
火速抢座 -
成都 丨 11月27日
火速抢座 -
重庆 丨 11月27日
火速抢座 -
厦门 丨 11月27日
火速抢座 -
福州 丨 11月27日
火速抢座 -
珠海 丨 11月27日
火速抢座 -
南宁 丨 11月27日
火速抢座 -
东莞 丨 11月27日
火速抢座 -
贵阳 丨 11月27日
火速抢座 -
昆明 丨 11月27日
火速抢座 -
洛阳 丨 11月27日
火速抢座 -
临沂 丨 11月27日
火速抢座 -
潍坊 丨 11月27日
火速抢座 -
运城 丨 11月27日
火速抢座 -
呼和浩特丨11月27日
火速抢座 -
长沙 丨 11月27日
火速抢座 -
南昌 丨 11月27日
火速抢座 -
宁波 丨 11月27日
火速抢座 -
深圳 丨 11月27日
火速抢座 -
大庆 丨 11月27日
火速抢座