Java面向对象特征有那些_红桃峰峰 的博客-程序员宅基地

技术标签: java面向对象特征  Java面试总结  Java面试题  

一、java面向对象的特征?

答:java面向对象的特征:封装、继承、多态、抽象。

如果问java面向对象的三大特征是什么?那就是封装、继承、多态,

但说到面向对象,还有一个很主要的特征就是抽象。

1、  封装

a) 铺垫:

    Java把真实世界中某些具有共同特征的实体抽象成Java中的类,类的实例就是一个对象,而对象和真实世界的实体是一一对应的,所以说java是一门面向对象的语言。

b)概念:

    每一个类中都会有属性和方法,封装指的就是把属性和方法隐藏起来,只保留一些对外的接口和外部进行交互。

c)封装的好处:

  i.减少耦合;

  ii.方便的修改自己的实现代码,不用修改那些调用我们代码的程序片段。

d)从程序的角度来分析封装带来的好处

  i.假设有一个Husband类,如图:

      

这个Husband类没有setter和getter方法,我们要想使用它,只能是这样

    


如果,项目需求现在更改了,要将age改为String类型的,如图:



如果我们的程序中有成百上千的地方都使用了husband.age,那么我们就奔溃了,



对于这种情况,如果我们使用了封装,就很简单了,我们只需要把Husband类中的age的setter和getter方法重新生成,同时把setAge方法里面更改了就可以了,



其他的地方依然使用原来的引用保持不变。



2、继承

a)概念:

   继承就是子类继承父类的特征和行为,使得子类对象具有父类的非private属性和方法。


           


a)类的继承格式:

通过extends关键字申明一个类继承另一个类,如

class父类{ }

class子类extends父类{ }

 

b)为什么需要继承?

  • 减少代码重复、臃肿,提高代码可维护性。

   假设现在我们开发动物类,其中动物分别是企鹅和老鼠,要求如下:

  •  企鹅:属性(姓名,id),方法(吃,睡,自我介绍)
  •  老鼠;属性(姓名,id),方法(吃,睡,自我介绍)



从这两段代码中可以看出来,代码重复了,如果在有其他的动物,代码越来越多,后期维护会很麻烦,对于这种情况,我们就可以使用继承来解决问题。

首先将两个动物相同的属性和方法,提取出来,形成一个动物类(父类)




然后让企鹅类和老鼠类都继承这个动物类,这样企鹅和老鼠就都具有了父类(动物类)的属性和方法了,子类中就不用写那么多重复的代码了。如:



a)继承的特性:

  i.子类拥有父类非private的属性和方法;

  ii.子类可以拥有完全属于自己的属性和方法(对父类扩展);

  iii.Java是单继承(每个子类只能继承一个父类);但是Java可以是多重继承(如A继承B,B继承C)。

  iv.增加了类之间的耦合(所以继承要慎用!!!)

b)扩充:

    上面说Java只支持单继承,但是有些时候某一个类已经继承了其他的父类,就没有办法再继承目前需要的其他父类了,这个时候,就可以使用另一个方式叫:实现implements。

使用implements关键字可以变相的使Java具有多继承的特性(实现多个接口时,接口和接口之间采用逗号隔开),



Super和this关键字:

Super关键字:我们可以通过super关键字来实现子类对父类成员的访问,引用当前实例对象的父类。

This关键字:指向实例对象自己的引用。

如:

 


3、多态

 

a)  概念:

多态就是同一个接口,使用不同的实现,而执行不同的操作。

如图:



a)多态的三个必要条件:

  i.继承(extends)

  ii.重写(子类重写父类的同名方法)

  iii.父类引用指向子类的对象,如:

Animal  a  = new Cat() ;

父类引用animal指向子类cat

b) 下面是一个多态实例的演示,

   i.定义一个抽象类Animal




  然后定义子类Cat和Dog,继承Animal,实现父类的eat()方法,同时定义一个自己的方法work()。




在main方法中调用



补充:

子类继承父类,重写父类的方法,

当子类对象调用重写的方法时,调用的是子类的方法,而不是父类的方法,

当想要调用父类中被重写的方法时,则需使用关键字super。


4、抽象

a)概念:

    抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象,数据抽象指的是属性,行为抽象指的是方法。

b)抽象方法:使用abstract修饰的方法是抽象方法。




b)抽象类:包含抽象方法的类是抽象类,抽象类使用abstract修饰。

(补充:不准确,抽象类中可以不包含抽象方法,但是如果一个抽象类中不包含抽象方法,定义为抽象类没有意义,所以我们就认为包含抽象方法的类就是抽象类)。



  i.抽象类不能创建对象;

  ii.如果一个类继承了抽象类,子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract。




iii.抽象类就是用来作为父类,让子类继承的。如果我们定义了一个抽象类,却不去继承它,就等于白白创建了一个抽象类,没有任何意义。




面试全集文章参考:http://www.importnew.com/22083.html




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011159417/article/details/73500054

智能推荐

c语言结构体易错点,C语言结构体注意点_无敌米修的博客-程序员宅基地

#include intmain(){/****************************************************定义结构体变量的3种方式* 1、先定义类型,再定义变量(分开定义)* struct Student* {* int age;* };* struct Student stu;...

三星android pie,三星Galaxy系列Android 9.0 Pie_weixin_39824529的博客-程序员宅基地

原标题:三星Galaxy系列Android 9.0 PieIT之家10月8日消息 安卓9.0 Pie发布也有一段时间了,除了谷歌自家的Pixel系列之外,华为、小米、一加、诺基亚等都已经适配了对应的安卓9.0 Pie的测试版本,三星目前到还没有关于升级安卓9.0 Pie的消息,这让很多三星用户表示不开森。 不过这一尴尬处境现在有了一个明朗的局面。据三星法国发言人在三星会员社区的讲话,其中说到了An...

redis-dump实现redis库迁移_dingmeinai9020的博客-程序员宅基地

最近公司有切换redis库的需求,找了个简单的redis迁移方法,不过也有缺点。就是对于实时性要求很高的redis库迁移无法做到数据的实时同步。不过对于简单的redis库备份和迁移还是可以的,各位看官自己定夺。环境ruby环境、gem包管理器、redis-dump工具安装先安装ruby环境然后安装redis-dump工具,mac或者linux系统使用sudosudo gem i...

郑州轻工业大学OJ-zznuoj-1008-美元和人民币_就是氧气c的博客-程序员宅基地

#include<stdio.h>int main(){ double n; scanf("%lf",&n); printf("%.2lf\n",n*6.5573); return 0;}

Spring系列(一):Spring是如何加载Bean的?_哟哟之名的博客-程序员宅基地_spring加载bean

一、Spring容器有哪些?单例池:是一个concurrentHashMap,key是beanName,value是objectBeanFactoryApplicationContext:是BeanFactory的一种拓展AnotationConfigApplicationContext(不可刷新):以注解方式ClassPathXMLApplicationContext(可刷新):从项目的根路径开始查找文件FileSystemXMLApplicationContext(可刷新):从工程的根路径

python sys.path_如何在Python中预先设置sys.path的路径?_weixin_39887531的博客-程序员宅基地

不建议这样做,因为它会硬编码路径,并使脚本难以在其他地方运行,但是您可以这样做>>> import sys>>> sys.path.insert(0,'/home/anand/')>>> print(sys.path)['/home/anand/', '', '/usr/local/lib/python2.7/dist-packages/_pd...

随便推点

各种水龙头拆卸图解_[各种水龙头拆卸图解]水龙头漏水怎么办_weixin_39646021的博客-程序员宅基地

导语:水龙头用久了都会有漏水的情况,不仅造成水资源的浪费,也让漏水的周围一直处于潮湿的情况,那么水龙头漏水怎么办呢?下面就由jy135小编给大家分享几种解决水龙头漏水的方法,大家一起去看看吧。水龙头漏水怎么办水龙头漏水怎么办方法一、按压式水龙头无论按压式水龙头具有何种外观,不管它是对冷热水分别有两个把手还是只有一个同时控制冷热水的把手,它都是按照某些基本原理来工作的。以下介绍的是怎样拆开一个按压式...

apicloud封装ajax,基于apicloudAJAX请求代码合集_参丸的博客-程序员宅基地

get请求代码:api.ajax({url:'http://m.weather.com.cn/data/101010100.html' //天气预报网站的WebService接口},function(ret,err){if (ret) {api.alert({msg:JSON.stringify(ret)});} else {api.alert({msg:JSON.stringify(err)})...

torch的安装 DenseCap依赖的库_weixin_34013044的博客-程序员宅基地

转载请注明出处:http://www.cnblogs.com/darkknightzh/p/5653864.html参考网址:http://torch.ch/docs/getting-started.htmlhttp://deepdish.io/2015/02/20/local-torch-installation/160714说明:如果需要使用torch及Graphic...

在html用div怎样写页脚,使用div+CSS将页脚始终控制在页面最下方的方法_weixin_39760919的博客-程序员宅基地

tml和body的高度并不一定相同,在内容少的时候,body的高度要小于html,当然这只会出现在body中的内容所占的空间高度小于浏览器的视口高度的时候,此时html的高度大于body的高度。网页中的元素都是以body最为参考,所以有必要保持html和body的高度相同。CSS Code复制内容到剪贴板html,body{height:100%;}第一种方法:在body中使用两个容器,包括网页的...

HDU1089-1096输入输出基础题组_浅然言而信的博客-程序员宅基地

1089 1 5 10 20 Sample Output 6 30代码#include <iostream>using namespace std;int main(){ int a,b,sum; while(cin>>a>>b) { sum=a+b; cout<<sum<<endl; }

VS2005自定义ActiveX控件发布_haodafeng2000的博客-程序员宅基地

下面讲一下VS2005发布的问题:1、数字签名。使用SignCode.exe进行数字签名,步骤如下: 首先要有工具包,包括以下几个软件:(C:/Program Files/Microsoft Visual Studio 8/Common7/Tools/Bin目录下都有) makecert.exe  制作cer格式的证书,即X.509证书,同时可以创建私钥 cert2spc.exe  将ce

推荐文章

热门文章

相关标签