众所周知,多态是面向对象语言中非常重要的一部分,多态在Java中究竟是如何实现的呢?
什么是多态
多态顾名思义,就是同一操作作用于不同对象,有不同的解释,实现不同的效果,产生不同的执行结果。
多态的必要条件
要想实现多态,必须要满足三个必要条件
1.有类的继承关系或者实现接口
2.子类要重写父类的方法
3.父类的引用指向子类的对象
类的继承和接口的实现
在Java中,不仅有类的继承,还有接口的实现。
类的继承
在Java中,类与类之间可以继承。使用extends关键字来实现,其语法结构为:
class SubClass extends SuperClass{
//类体的定义
}
被继承的类叫做父类或者超类,继承父类的类叫做子类或者派生类。
和C++不同,在Java语言中,只允许单继承,也就是一个子类只能有一个父类,但一个父类可以有多个子类。
如果B类继承了A类,C类继承了B类,那么C类就间接继承了A类。
如果一个类后面不跟extends,那么它默认继承Java中的Java.lang.object类。
所有的类都直接或间接的继承了Object类。
子类继承了父类中的非private的属性和方法,同时,子类也可以有自己的成员和方法。
super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
例:
public class Test{ //定义了Test类
private int a;
public int b;
protected int c;
int d;
public Test(int a, int b, int c, int d) { //定义了Test类的有参构造器
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
void method(){
System.out.println(a);
}
}
class TestTwo extends Test{ //定义了Test2类来继承Test类
public TestTwo(){
super(1,2,3,4); //使用super关键字来调用父类的有参构造器,1,2,3,4分别代表a,b,c,d的值。
}
int e;
voi