java基础——多态
上次说完了类的继承,这次来说说多态,首先,我们学习一个新的知识点前都会思考几个问题,什么是多态?为什么要学多态?怎么用多态?接下来我们逐个问题去解答
什么是多态?
话不多说,先来个名词解析:
多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口。 多态类型(英语:polymorphic type)可以将自身所支持的操作套用到其它类型的值上。
名词解析的解释有点生硬,那我们就用自己的话来解释,多态,见名知义,就是多种形态,那是谁多种形态呢?java中主要就是类和对象,我们写了一个类的代码,那这个代码基本上是不变的了,那能有多种形态的也就是对象了。多态是父类的引用指向子类的实例。再通俗点讲就是比如有一个人类、一个学生类、一个教师类,我们人类实例化出来的对象可以是一个学生,也可以是一个教师。
文字有点生硬,我们通过代码来理解。
public class Person {
String name;
String sex;
int age;
public void sleep() {
System.out.println("睡觉");
}
public void eat() {
System.out.println("吃饭");
}
}
public class Student extends Person{
String stuNo;
public void study() {
System.out.println("学习");
}
public void eat() {
System.out.println("子类的吃饭");
}
}
public class Teacher extends Person{
String teaNo;
public void teach() {
System.out.println("授课");
}
@Override
public void eat() {
System.out.println("子类的吃饭");
}
}
public class TestPerson {
public static void main(String[] args) {
Person person=new Student();
Person person1=new Teacher();
}
}
从上面的代码我们可以看出,一个父类的引用指向了学生这个子类的对象,那此时我们这个person代表的就是一个学生,再看,同样是Person类型的一个引用指向了教师这个子类的对象,那此时我们的这个person1就代表一个教师。从这是不是就可以看出了我同一个类型的引用能代表不同的 对象,是不是就是不同的形态呢?这就是多态。
为什么要学多态?
为什么要学多态?当然是因为多态用的多,假如没人用多态我们就没必要去学了,那问题又来了,多态有什么用?首先,使用多态是为了解耦,那什么是解耦?
一、耦合
1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。
2、在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。
3、分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。
二、解耦
1、解耦,字面意思就是解除耦合关系。
2、在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。
3、设计的核心思想:尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B的功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。
总结上面的解释就是,解耦就是为了日后系统的维护和扩展。就像我们日常生活中,我们对通信很依赖,但是假如哪天通信设备坏了,那就会严重影响我们的工作和生活,而我们能做的就是降低这个影响,当然这个影响只能是降低,不可能完全消除。
怎么实现多态?
在上面我们已经举过了多态的实现方式的例子了,但是需要注意的是,在上面实现多态的前提是两个类之间有继承关系,但这不是实现多态的唯一方法,我们还能够通过接口的方式来实现多态。在我们以后的运用中用的更多的是通过接口的方式来实现多态。