java面向对象三大特性:继承,封装、多态。
1、继承:
所谓继承,以人为例子。父亲生下儿子,具有相同特征,有嘴巴,鼻子,耳朵,四肢。还有爸爸跟着爷爷学会了木匠,儿子跟着父亲,从小也学会了木匠。这些都继承了。但是也有父类所没有的,比如爸爸不会的书法,儿子在后天的学习中学会了。概念并不复杂。java中的继承,抛弃了c++中的多继承,只能继承一个父类。
继承的关键字是exdents。
下面来一段代码:
class A{
Brain brain;//成员属性定义为对象。脑
Limb limb;//四肢
Foot foot;//脚
void category(){
System.out.prinyln(“我是人类”);
}
void Skill(){
System.out.prinyln(“我会木工、会编程”);
}
}
class B extends A{//继承A类
void Skill(){
System.out.prinyln(“我会书法、会下象棋”);
}
}
B继承A,A的所以特性都被继承了。但是技能覆盖了父类的技能。
如果三个类,A类是父亲,B类是母亲,C类是儿子。儿子想要继承A类,又想继承B类。在java就需要这样想。B继承A,C继承B,达到C继承了A和B。所以java在继承上面还是有缺陷,但是比起c++的多继承,从技术的角度来说,是为了降低复杂性。例如,A类中有一个m方法,B类中也有一个m方法。如果C类单独继承A类或者B类时,C类中的m方法要么继承于A类,要么继承于B类。而如果多重继承的话,C类的m方法有可能来自A类,又有可能来自B类,就会造成冲突。这样的继承关系,就会增加复杂性,甚至进一步影响多态的灵活性。
2、封装:
拿银行的自动取款机为例子。你现在操作取款机,就是希望能取出自己的钱。取款机取钱不是直接在里面拿,而是需要你操作,然后通过取款机的出钞口出来。这样就解决了安全性。你不知道取款机里面有多少钱,也不能多拿。这就是封装。
来一段代码:
class A{
private static double money;//取款机现有金额
String WithdrawMoney(double money){//取钱的方法。参数为要取的金额
String s="取钱没开始";
if(this.money >= money){//如果取款机里面有足够的钱,就取出。
//取出钱的操作
s = "取款成功";
}else{
s = "取款机余额无法取出这么多";
}
return s;
}
}
这里定义了取款机,里面的钱,是private私有的,无法直接进行操作,只能通过WithdrawMoney()取钱方法来取钱。
这就是所谓的封装,使程序更加安全。
3、多态:
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。 对不同类的对象发出相同的消息将会有不同的行为。比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”, 因为“员工”是一个抽象的事物, 只要是员工就可以开始工作,他知道这一点就行了。至于每个员工,当然会各司其职,做各自的工作。多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定。再举个比较形象的例子:比如有一个函数是叫某个人来吃饭,函数要求传递的参数是人的对象,可是来了一个美国人,你看到的可能是用刀和叉子在吃饭,而来了一个中国人你看到的可能是用筷子在吃饭,这就体现出了同样是一个方法,可以却产生了不同的形态,这就是多态!
下次得有一个专门的文章,来讲多态!
“我自己是一名从事了多年的java开发的老程序员,辞职目前在做线上教育讲师,今年4月我花了一个月整理了一份最适合2018年学习的java材料,从最基础的面向对象到线程,jdbc都有整理,送给每一位小伙伴,这里是学习者聚集地,欢迎初学和进阶中的小伙伴。"
加QQ群:850665689 (招募中)
领取专属 10元无门槛券
私享最新 技术干货