基础知识--封装、继承、多态、抽象

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基础知识--封装、继承、多态、抽象⼀、封装
封装:是⾯向对象⽅法的重要原则,就是把对象的属性和⾏为(数据)结合为⼀个独⽴的整体,并尽可能隐藏对象的内部实现细节,就是把不想告诉或者不该告诉别⼈的东西隐藏起来,把可以告诉别⼈的公开,别⼈只能⽤我提供的功能实现需求,⽽不知道是如何实现的。

增加安全性
public class Person {
private String name;
private int gender;
private int age;
public String getName() {
return name;
}
public String getGender() {
return gender == 0 ? "man" : "woman";
}
public void work() {
if (18 <= age && age <= 50) {
System.out.println(name + " is working very hard!");
} else {
System.out.println(name + " can't work any more!");
}
}
}
以上 Person 类封装 name、gender、age 等属性,外界只能通过 get() ⽅法获取⼀个 Person 对象的 name 属性和 gender 属性,⽽⽆法获取 age 属性,但是 age 属性可以供 work() ⽅法使⽤。

注意到 gender 属性使⽤ int 数据类型进⾏存储,封装使得⽤户注意不到这种实现细节。

并且在需要修改 gender 属性使⽤的数据类型时,也可以在不影响客户端代码的情况下进⾏。

⼆、继承
继承:是⾯向对象最显著的⼀个特性,继承是从已有的类中派⽣出新的类称为⼦类,⼦类继承⽗类的数据属性和⾏为,并能根据⾃⼰的需求扩展出新的⾏为,提⾼了代码的复⽤性。

Animal animal = new Cat();
继承应该遵循⾥⽒替换原则,⼦类对象必须能够替换掉所有⽗类对象。

三、多态
多态:指允许不同的对象对同⼀消息做出相应。

即同⼀消息可以根据发送对象的不同⽽采⽤多种不同的⾏为⽅式(发送消息就是函数调⽤)。

封装和继承⼏乎都是为多态⽽准备的,在执⾏期间判断引⽤对象的实际类型,根据其实际的类型调⽤其相应的⽅法。

多态分为编译时多态和运⾏时多态。

编译时多态主要指⽅法的重载,运⾏时多态指程序中定义的对象引⽤所指向的具体类型在运⾏期间才确定。

//⽗类
public class Base {
protected void show() {}
}
//⼦类
class Kid: Base {
public void show() {
System.out.println(" i am kid");
}
}
public static void main( String[] args )
{
Base base = new Kid();
base.show();
}
四、抽象
抽象是从众多的事物中抽取出共同的、本质性的特征,⽽舍弃其⾮本质的特征。

例如苹果、⾹蕉、⽣梨、葡萄、桃⼦等,它们共同的特性就是⽔果。

得出⽔果概念的过程,就是⼀个抽象的过程。

要抽象,就必须进⾏⽐较,没有⽐较就⽆法找到共同的部分。

共同特征是指那些能把⼀类事物与他类事物区分开来的特征,这些具有区分作⽤的特征⼜称本质特征。

因此抽取事物的共同特征就是抽取事物的本质特征,舍弃不同特征。

所以抽象的过程也是⼀个裁剪的过程,不同的、⾮本质性的特征全部裁剪掉了。

所谓的共同特征,是相对的,是指从某⼀个刻⾯看是共同的。

⽐如,对于汽车和⼤⽶,从买卖的⾓度看都是商品,都有价格,这是他们的共同的特征,⽽从其他⽅⾯来⽐较是,他们则是不同的。

所以在抽象时,同与不同,决定于从什么⾓度上来抽象。

抽象的⾓度取决于分析问题的⽬的。

在软件开发过程中,识别稳定的需求、识别核⼼的需求、识别概念性的需求、设计系统的架构、定义系统中构件之间的接⼝关系等等都是抽象的过程,都是反应系统的本质特征的过程。

抽象的,才是稳定的,才是永恒的。

抽象的反义词是具体。

⼈员往往会说:“你讲的太抽象了,能不能讲的具体⼀点?”
在开发语⾔中,有抽象类,有具体类,具体类可以继承⾃抽象类,可以实例化。

抽象类可以派⽣出众多的不同的具体类。

所谓:“⼀⽣⼆,⼆⽣三,三⽣万物”。

系统的稳定体现在抽象类,系统的变化体现在具体类。

抽象类的层次要⾼于具体类。

系统因抽象⽽稳定,因抽象⽽⽣动。

抽象⽤ abstract 关键字来修饰,⽤ abstract 修饰类时,此类就不能被实例化,从这⾥可以看出,抽象类就是为了继承⽽存在的,
如果定义了⼀个抽象类⽽不去继承它,那么等于⽩⽩创建了这个抽象类,因为你不能⽤它来做任何事情,⽤ abstract 修饰⽅法时,此⽅法就是抽象⽅法,抽象⽅法必须存在于抽象类中,抽象⽅法没有⽅法体,
对于⼀个⽗类来说,如果它的某个⽅法在⽗类中实现出来没有任何意义,必须根据⼦类的实际需求来进⾏不同的实现,那么就可以将这个⽅法声明为抽象⽅法,抽象⽅法的修饰符必须为 public 或者 protected ,因为⽤ private,则不能被⼦类继承,⼦类便⽆法实现该⽅法,缺省情况下默认为 public 。

相关文档
最新文档