Java 程序问题

2024-11-19 18:39:40
推荐回答(2个)
回答1:

本类内部的方法可以直接调用
调用别的类 需要实例化别的类来调用别的类的方法
而本类不需要

B b=new B();
实际上是b指向了new B()这个对象,
而A a=b;
说明a这个变量也指向了new B()这个对象
为方法起见你可以直接理解成A a=new B()

然后调用callA(a);
内部a.func1();
a.func2();被调用
由于是实例方法,所以其实调用的是子类方法

这个涉及到动态绑定和静态绑定:
----------------
A a=new B()
这种左父右子的形式
a.静态方法,a.静态属性 a.属性调用父类还是子类的 看是以什么类型声明这个变量的。
这里A a所以调用父类的
这个称之为静态绑定
而a.实例方法(即没有被static的方法)调用父类还是子类的 看new的是什么类型的
这里new B() new 的是B类的。所以调用子类。
称之为动态绑定
-----------------
这样的话到底调用什么的总清楚了吧

回答2:

本类内部的方法可以直接调用
调用别的类 需要实例化别的类来调用别的类的方法
而本类不需要

B b=new B();
实际上是b指向了new B()这个对象,
而A a=b;
说明a这个变量也指向了new B()这个对象
为方法起见你可以直接理解成A a=new B()

然后调用callA(a);
内部a.func1();
a.func2();被调用
由于是实例方法,所以其实调用的是子类方法

这个涉及到动态绑定和静态绑定:
----------------
A a=new B()
这种左父右子的形式
a.静态方法,a.静态属性 a.属性调用父类还是子类的 看是以什么类型声明这个变量的。
这里A a所以调用父类的
这个称之为静态绑定
而a.实例方法(即没有被static的方法)调用父类还是子类的 看new的是什么类型的
这里new B() new 的是B类的。所以调用子类。
称之为动态绑定
-----------------
这样的话到底调用什么的总清楚了吧 追问public static void callA(A a)
{
a.func1();
a.func2();
}
a指向B了 那么B中也没有func2这个方法啊 怎么又调用到B中的 func1了??