Java三大特征
封装
继承
多态
先讲讲抽象
抽象:从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。
在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。
一、封装
定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。
途径:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员
人{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
}
二、继承
允许存在父子类的关系,一个子类有且只有一个直接的父类(Java中的继承是类之间的单继承.)
继承的目的: 实现代码的复用.理顺类型对象之间的结构关系.
继承的含义
子类自动拥有父类的属性和行为(一般化的体现,目的就是达到代码的复用)
子类可以定义自己特有的属性和行为(特殊化的体现,目的就是达到功能的扩展)
子类可以把从父类继承下来的行为用自己的方式重新实现(通过方法重写来达到)
有些事物有共性,但还存在区别
人
{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
}
教师
{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
教书(行为之四)
}
Overload与Override
比较Overload & Override
Overload:同一个类中方法名相同,参数列表不同
Override:不同类中(父类和子类),方法名相同,参数列表也相同
三、多态
多态: 一个接口多种实现,可以理解为一种语法上的允许,表现形式多样。
简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针
多态也称为动态绑定、后期绑定、运行时绑定。
例如
IA ia = new TestIA();其中IA为定义的接口,TestIA为接口的实现类
Father f = new Son();其中Father为父类,Son为子类
Animal a = new Dog();其中Animal为抽象类,Dog为Animal类的子类
多态的特点
子类都能以父类的身份出现(里氏代换原则)
子类以父类的身份出现,但是做事情时,还是用子类自己的方式来实现
子类以父类的身份出现时,自己特有的属性和行为将不能使用
具体例子
人这个类,封装了很多人类共有的特性
教师是人的子类,继承了人的属性与行为,当然教师有自己的特征行为,比如教书授课
学生是人的子类,继承了人的属性与行为,当然学生有自己的特征行为,比如学习做作业
现在,当我们需要去描述教师与学生各自的行为的时候, 我们可以分开来说"教师在授课", "学生做作业", 但如果我们要站在抽象的角度, 也就是从教师与学生的父类"人"的角度, 来同时描述他们各自的行为时,我们怎么描述?"人在授课"?"人在做作业"?这是不是怪怪的很不合适?不合适的问题就在于, 对于行为主体,我们使用了抽象层次的东东"人",而对于行为本身, 我们却使用了具体的东东"授课"与"教书". 怎么解决呢? 那就需要解决抽象与具体的矛盾问题.
既然是站在抽象在角度来描述,那我们把行为抽象一下,不就能同时描述了吗?比如"人在做事"(教师授课与学生做作业都可以说成人在做事),这样就解决了抽象层次与具体层次之间的矛盾
到了这一步, 我们可以把两个描述: "教师在做事", "学生在做事" 两者统一为"人在做事",
然后, 我们可以在"教师"的"做事"行为中去调用教师自己的特征行为"授课",
在"学生"的"做事"行为中去调用学生自己的特征行为"做作业",
所以,当调用"人"去"做事"的时候,如果这个人是教师,那他所做的事实际上就是"教书",
如果这个人是学生,那他所做的事实际上就是"做作业".
也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是"授课"与"做作业".
多态, 就是站在抽象的层面上去实施一个统一的行为,到个体(具体)的层面上时, 这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为.
谢谢
封装
继承
多态
先讲讲抽象
抽象:从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。
在抽象时,同与不同,决定于从什么角度上来抽象。抽象的角度取决于分析问题的目的。
一、封装
定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。
途径:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员
人{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
}
二、继承
允许存在父子类的关系,一个子类有且只有一个直接的父类(Java中的继承是类之间的单继承.)
继承的目的: 实现代码的复用.理顺类型对象之间的结构关系.
继承的含义
子类自动拥有父类的属性和行为(一般化的体现,目的就是达到代码的复用)
子类可以定义自己特有的属性和行为(特殊化的体现,目的就是达到功能的扩展)
子类可以把从父类继承下来的行为用自己的方式重新实现(通过方法重写来达到)
有些事物有共性,但还存在区别
人
{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
}
教师
{
年龄(属性一)
身高(属性二)
性别(属性三)
做事(行为之一)
走路(行为之二)
说话(行为之三)
教书(行为之四)
}
Overload与Override
比较Overload & Override
Overload:同一个类中方法名相同,参数列表不同
Override:不同类中(父类和子类),方法名相同,参数列表也相同
三、多态
多态: 一个接口多种实现,可以理解为一种语法上的允许,表现形式多样。
简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针
多态也称为动态绑定、后期绑定、运行时绑定。
例如
IA ia = new TestIA();其中IA为定义的接口,TestIA为接口的实现类
Father f = new Son();其中Father为父类,Son为子类
Animal a = new Dog();其中Animal为抽象类,Dog为Animal类的子类
多态的特点
子类都能以父类的身份出现(里氏代换原则)
子类以父类的身份出现,但是做事情时,还是用子类自己的方式来实现
子类以父类的身份出现时,自己特有的属性和行为将不能使用
具体例子
人这个类,封装了很多人类共有的特性
教师是人的子类,继承了人的属性与行为,当然教师有自己的特征行为,比如教书授课
学生是人的子类,继承了人的属性与行为,当然学生有自己的特征行为,比如学习做作业
现在,当我们需要去描述教师与学生各自的行为的时候, 我们可以分开来说"教师在授课", "学生做作业", 但如果我们要站在抽象的角度, 也就是从教师与学生的父类"人"的角度, 来同时描述他们各自的行为时,我们怎么描述?"人在授课"?"人在做作业"?这是不是怪怪的很不合适?不合适的问题就在于, 对于行为主体,我们使用了抽象层次的东东"人",而对于行为本身, 我们却使用了具体的东东"授课"与"教书". 怎么解决呢? 那就需要解决抽象与具体的矛盾问题.
既然是站在抽象在角度来描述,那我们把行为抽象一下,不就能同时描述了吗?比如"人在做事"(教师授课与学生做作业都可以说成人在做事),这样就解决了抽象层次与具体层次之间的矛盾
到了这一步, 我们可以把两个描述: "教师在做事", "学生在做事" 两者统一为"人在做事",
然后, 我们可以在"教师"的"做事"行为中去调用教师自己的特征行为"授课",
在"学生"的"做事"行为中去调用学生自己的特征行为"做作业",
所以,当调用"人"去"做事"的时候,如果这个人是教师,那他所做的事实际上就是"教书",
如果这个人是学生,那他所做的事实际上就是"做作业".
也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是"授课"与"做作业".
多态, 就是站在抽象的层面上去实施一个统一的行为,到个体(具体)的层面上时, 这个统一的行为会因为个体(具体)的形态特征而实施自己的特征行为.
谢谢