Java是一门面向对象的语言,那么问题来了,有人会问,老师,我没对象,我该怎么办,老师会发么还是要自己带,此对象非彼对象,今天我们一起来学习一下面向对象的编程思想。
是划时代的编程思想变革,推动了高级语言的快速发展和工业化进程。OOP 的抽象、封装、继承、多态的理念使软件大规模化成为可能,有效地降低了软件开发的成本、维护成本和复用成本。面向对象编程思想是大型软件的开发就像搭积木一样隔离可控、高效简单,是当今编程领域的一股势不可挡的潮流。OOP实践了软件工程的三个主要目标:可维护、可重用和可扩展性
对象
万物皆对象,你所能看到的、摸到的、听到的都可以是对象。对象是一个自包含的实体,用一组属性 + 行为标识,谁拥有数据谁就拥有操作的方法。
封装
封装是一种对象功能内聚的表现形式,是功能之间的耦合度降低,更具有维护性。每个对象都包含他能进行操作所需要的所有信息,因此对象不必依赖其他对象来完成自己的操作
属性私有,对外提供可操作的方法
优点:
示例:狗拥有叫这个属性,shout 属性私有,别的类通过 get 和 set 方法访问属性或修改属性
class Dog{
private String shout= "汪汪汪";
public String getShout(){
return shout;
}
public void setShout(String shout){
this.shout= shout;
}
}
继承
继承使子类能够继承父类,获得父类的部分属性和行为,使得模块更具复用性
对象继承代表一种 a is A 的关系,a是子类,A是父类,也就是 a 是 A,狗 是 动物,狗 就 继承了动物。还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的特性。
继承定义了类如何相互关联,共享特。继承的工作方式是,定义父类和子类,或者说是基类和派生类,其中子类继承父类的所有特性。子类不但继承了父类的所有特性,还可以定义新的特性。
优点:
缺点:
示例:狗和猫都是动物,狗 和 猫都继承了动物,狗会游泳,猫会爬树
class Animal{
private String shout;
public String getShout(){
return shout;
}
public void setShout(String shout){
this.shout= shout;
}
}
class Dog extends Animal{
private String swim;
}
class Cat extends Animal{
private String goTree;
}
多态
多态使模块在复用性基础上更加有扩展性,使系统运行更有想象空间。
多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。子类可以使用 override 关键字,将父类实现替换为他自己的实现,这就是方法重写或者方法改写。
示例:动物都会叫,但是猫是喵喵喵,狗是汪汪汪,我们把shout 改成 方法
class Animal{
String shout();
}
class Dog extends Animal{
@Overide
public String shout(){
System.out.println("汪汪汪");
}
}
class Cat extends Animal{
@Overide
public String shout(){
System.out.println("喵喵喵");
}
}
抽象(第四大特性)
对需求进行业务抽象和建模分析,通过模型组合去解决某一类问题。
上面我举得例子,动物其实是无法实例化的,猫和狗我们都能想象出来一个具体的物体,而动物是一类的统称,所以就延伸了抽象的概念 abstract。
抽象类通常代表一个抽象概念,他提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点是抽象类。
梧高凤必至,花香蝶自来
参考文档:
无尘老师PPT
《大话设计模式》 --程杰