- 多态的概念
多态分为类的多态和方法的多态,类的多态就是一个类型可以有不同的表现形态,什么样的类型才会具备多态呢?只有被多个子类继承或者实现的父类才具备多态的特征,因为在运行期间可以根据具体的子类表现出不同的状态,类的多态的表现就是向上转型和向下转型。
方法的多态就是一个方法名称却有不同的实现,其实就是方法的重载,在调用方法的时候具体调用哪一-个是在运行期根据传递的实际参数的类型来确定调用哪一个方法,也就是同一个方法名称可以有不同的表现形式,这就是方法的多态。方法多态的表现就是方法的重载。
- 多态的特点
- 多态的优点
消除类型之间的耦合关系,可替换性,可扩充性,接口性,灵活性,简化性
- 多态存在的三个必要前提
继承
重写
父类引用指向子类对象
引用变量只能调用它编译类型的方法,不能调用它运行类型的方法。这时,我们就需要进行类型的强制转换!
一个父类的引用类型变量可以“指向”其子类的对象。
一个父类的引用不可以访问其子类对象新增加的成员(属性和方法)。
可以使用引用变量 instanceof 类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类。
子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称为向下转型(downcasting)
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
- 多态的例子
public class lizhi {
public static void main(String[] args) {
show(new wo());
show(new bieren());
human a = new wo();
a.eat();
wo c = (wo)a;
c.work();
}
public static void show(human a) {
a.eat();
if (a instanceof wo) {
wo c = (wo)a;
c.work();
} else if (a instanceof bieren) {
bieren c = (bieren)a;
c.work();
}
}
}
class human {
public void eat();
}
class wo extends human {
public void eat() {
System.out.println("恰饭");
}
public void work() {
System.out.println("摸鱼");
}
}
class bieren extends human {
public void eat() {
System.out.println("恰大饭");
}
public void work() {
System.out.println("学习");
}
}
执行以上程序,输出结果是:
恰饭
摸鱼
恰大饭
学习
恰饭
摸鱼
- 重写
子类能够重写父类的方法。
当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。
要想调用父类中被重写的方法,则必须使用关键字super。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)