多态就是指程序中定义的援用变量所指向的具体类型和通过该援用变量收回的办法调用在编程时并不确定,而是在程序运行期间才确定,即一个援用变量到底会指向哪个类的实例对象,该援用变量收回的办法调用到底是哪个类中实现的办法,必须在由程序运行期间能力决定
目录
1. 多态的概念
2. 向上转型
2.1 概念
2.2 常见的向上转型的模式
3. 重写
3.1 重写的注意事项
在完结继承内容之后便是多态,这同样也是面向对象程序的个性
有一点须要阐明:为不便演示,所以我在一个 java 文件中定义了多个类,但实际上是不举荐这么做的
1. 多态的概念
简略来讲就是不同的对象去实现同一个行为,然而产生了不同的状态
一个很简略的例子:学校某个班级的学生加入同一场考试,考试完结后不同的学生的考试成绩都是不同的,有的不及格、有的在及格线上游走、而有的则是高分,那么你在哪个程度~(~▽~)~
要实现多态是须要条件的,具体条件如下:
1. 必须在继承体系下,且产生了向上转型
2. 子类要对父类的办法进行重写
3. 通过父类的援用调用重写办法
上述波及的一些新的概念,上面会具体介绍
2. 向上转型
2.1 概念
咱们对前文所写的类进行一下批改:
class Plant {
String name;
String source;
String genu;
public void func() {System.out.println("父类办法");
}
}
class Tree extends Plant {public void trait() {System.out.println("子类办法");
}
}
所谓向上转型就是创立一个子类对象,将其当成父类来进行应用
具体操作如下:
1
Plant tree=new Tree();
因为是当成父类来应用,所以此时 tree 便不能调用子类的办法
Java 中有向下转型,但因为向下转型不平安,所以就略过
2.2 常见的向上转型的模式
上述例子中是第一种:间接赋值
除此以外还有两种模式
作为办法的参数
作为办法的返回值
3. 重写
即子类对父类的办法进行从新编写,此办法不能是构造方法,也不能被 private、final 以及 static 润饰,而咱们重写的是办法外面的内容,办法的办法名、返回值和参数都不能批改
仍旧是对类进行批改:
class Plant {
String name;
String source;
String genu;
public void trait() {System.out.println("父类办法");
}
}
class Tree extends Plant {
@Override // 注解,此注解能够进行一些合法性校验
public void trait() {System.out.println("子类办法");
}
}
咱们向上转型后看看调用 trait 的后果是什么:
调用的是子类的办法,而这也是重写的特点
其实在编译的时候,调用的的确是父类的办法,但重写的办法是在执行阶段才确定调用哪个办法(即动静绑定)这也是重写和重载之间实质的区别
3.1 重写的注意事项
1.static、final、private 润饰的办法以及构造方法不能重写
2. 子类办法的拜访权限要大于等于父类
3. 在 JDK7 之后,重写的办法返回值类型能够不同,但必须具备父子关系,这属于协变类型
4. 不要在构造方法中调用重写的办法
最初一点独自阐明:假如父类的构造方法调用了重写的办法,因为子类的构造方法会首先调用父类构造方法,所以在子类对象还没有齐全结构实现的时候就曾经动静绑定调用了重写的办法,这种状况下程序呈现问题的几率会大大增加
在理解完向上转型和重写之后业根本晓得 Java 中是如何实现多态的:在继承体系下联合向上转型和重写实现多态的内容完结,
心愿能帮忙到大家!