代码4为什么是9
对于多态总结一下
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中 的这个方法;(动态连接、动态调用)
四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父 类中的变量,那么在编译时会报错。
A a = new B();这是java典型的三大特性之一多态,父类的引用指向子类
父类中的g方法静态方法,虽然子类中也有静态的g方法,但是子类不会重写父类的方法,
所以代码4调用的还是父类中的方法.如果父类和子类的方法都修改成非静态,则子类会重写父类的g方法,则会调用子类的g方法
测试代码如下:
public class E {
public static void main(String[] args) {
B b = new B();
System.out.println(b.f(10.0,8.0));
System.out.println(b.g(3));
A a = new B();
System.out.println(a.f(10.0,8.0));
System.out.println(a.g(3));
}
}
class A {
double f(double x, double y){
return x+y;
}
int g(int n){
return n*n;
}
}
class B extends A{
double f(double x, double y){
double m = super.f(x,y);
return m+x*y;
}
int g(int n){
//int m = A.g(n);
return n;
}
}
测试结果:
98.0
3
98.0
3
A a=new B();
new的这个B是类A,调用A里的方法