面向对象中的多态
程序员文章站
2022-07-12 14:59:49
...
在说多态之前,我们先看一段代码:
分析这段程序的输出是什么。如果在eclipse中运行这段代码,是编译不过的,问题在于obj为A类型的,它不可以访问它的子类中的成员变量j,也就是obj.j = 2这一句是错误的。如果把这句删除之后输出结果是什么呢。答案为:3, 4, 4。如果和你想的一样那么你可以越过这篇文章了。如果不一样就看一下。首先当我们new B()的时候,程序首先调用的是父类的构造函数,然后在调用子类的构造函数。输出3,4。最后一个4是因为子类中重写了父类中的display()方法,obj虽然是A类型的,但是运行的时候,它调用的是子类中的方法。这其实就是多态的体现,满足三个条件,1. 继承,2. 重写, 3. 父类的引用变量指向子类的对象。
package JavaInterview; class A { int i; public A() { i = 3; System.out.println(i); } void display() { System.out.println(i); } } class B extends A { int j; public B() { j = 4; System.out.println(j); } void display() { System.out.println(j); } } public class InheritanceDemo { public static void main(String[] args) { A obj = new B(); obj.i=1; obj.j=2; // can't reach it obj.display(); } }
分析这段程序的输出是什么。如果在eclipse中运行这段代码,是编译不过的,问题在于obj为A类型的,它不可以访问它的子类中的成员变量j,也就是obj.j = 2这一句是错误的。如果把这句删除之后输出结果是什么呢。答案为:3, 4, 4。如果和你想的一样那么你可以越过这篇文章了。如果不一样就看一下。首先当我们new B()的时候,程序首先调用的是父类的构造函数,然后在调用子类的构造函数。输出3,4。最后一个4是因为子类中重写了父类中的display()方法,obj虽然是A类型的,但是运行的时候,它调用的是子类中的方法。这其实就是多态的体现,满足三个条件,1. 继承,2. 重写, 3. 父类的引用变量指向子类的对象。
上一篇: cvxopt求解二次型规划
下一篇: 多态,动态绑定