public class SuperClass {
public void method(){
System.out.println("SuperClass.method()");
}
public void method(SuperClass superObj,SuperClass subObj){
System.out.println("SuperClass.method(SuperClass,SuperClass)");
}
}
public class SubClass extends SuperClass{
public void method(){
System.out.println("SubClass.method()");
}
public void method(SuperClass superObj,SubClass subObj){
System.out.println("SubClass.method(SuperClass,SubClass)");
}
public void method(SubClass superObj,SuperClass subObj){
System.out.println("SubClass.method(SubClass,SuperClass)");
}
public void method(SubClass superObj,SubClass subObj){
System.out.println("SubClass.method(SubClass,SubClass)");
}
}
public class OverloadDemo {
public static void main(String[] args) {
SuperClass superObj=new SuperClass();
SubClass subObj=new SubClass();
SuperClass superReferToSub=subObj;
System.out.println();
subObj.method(superObj, superObj);
subObj.method(subObj, subObj);
subObj.method(superReferToSub, superReferToSub);
System.out.println(); superReferToSub.method();
superReferToSub.method(superObj, superObj);
superReferToSub.method(subObj, subObj);
superReferToSub.method(superReferToSub, superReferToSub);
}
}
执行结果是:
SuperClass.method(SuperClass,SuperClass)
SubClass.method(SubClass,SubClass)
SuperClass.method(SuperClass,SuperClass)//1SubClass.method()//2
SuperClass.method(SuperClass,SuperClass)
SuperClass.method(SuperClass,SuperClass)
SuperClass.method(SuperClass,SuperClass)
问
1.既然subObj.method(superReferToSub, superReferToSub)没有调用SubClass.method(SubClass,SubClass),也就是说明SuperClass superReferToSub=subObj;的superReferToSub还是超类,但是为什么下面的2.既然superReferToSub是超类,那么应该调用超类的method函数 SuperClass superRef=superObj;
superRef=subObj;superRef还是SuperClass 类? 我都快崩溃了,谁知道啊~~
public void method(){
System.out.println("SuperClass.method()");
}
public void method(SuperClass superObj,SuperClass subObj){
System.out.println("SuperClass.method(SuperClass,SuperClass)");
}
}
public class SubClass extends SuperClass{
public void method(){
System.out.println("SubClass.method()");
}
public void method(SuperClass superObj,SubClass subObj){
System.out.println("SubClass.method(SuperClass,SubClass)");
}
public void method(SubClass superObj,SuperClass subObj){
System.out.println("SubClass.method(SubClass,SuperClass)");
}
public void method(SubClass superObj,SubClass subObj){
System.out.println("SubClass.method(SubClass,SubClass)");
}
}
public class OverloadDemo {
public static void main(String[] args) {
SuperClass superObj=new SuperClass();
SubClass subObj=new SubClass();
SuperClass superReferToSub=subObj;
System.out.println();
subObj.method(superObj, superObj);
subObj.method(subObj, subObj);
subObj.method(superReferToSub, superReferToSub);
System.out.println(); superReferToSub.method();
superReferToSub.method(superObj, superObj);
superReferToSub.method(subObj, subObj);
superReferToSub.method(superReferToSub, superReferToSub);
}
}
执行结果是:
SuperClass.method(SuperClass,SuperClass)
SubClass.method(SubClass,SubClass)
SuperClass.method(SuperClass,SuperClass)//1SubClass.method()//2
SuperClass.method(SuperClass,SuperClass)
SuperClass.method(SuperClass,SuperClass)
SuperClass.method(SuperClass,SuperClass)
问
1.既然subObj.method(superReferToSub, superReferToSub)没有调用SubClass.method(SubClass,SubClass),也就是说明SuperClass superReferToSub=subObj;的superReferToSub还是超类,但是为什么下面的2.既然superReferToSub是超类,那么应该调用超类的method函数 SuperClass superRef=superObj;
superRef=subObj;superRef还是SuperClass 类? 我都快崩溃了,谁知道啊~~
SuperClass superReferToSub=subObj 方法是子类中SubClass中的,属性是SuperClass中的,调用的方法是实例化的类中的,属性是申明类中的
public void fritsMethod(){
secondMethod();
}
public void secondMethod(){
System.out.print("SuperClass.secondMethod()");
}
}
public class SubClass extends SuperClass{
public void secongMethod(){
System.out.print("SubClass.secondMethod()");
}
}
public class bing { public static void main(String[] args) {
SubClass subObj=new SubClass();
SuperClass superRef=subObj;
superRef.fritsMethod();
}
}
但是我上面的输出结果是SuperClass.secondMethod(),如果她的调用的方法是实例化的类中的,那么就没有fritsMethod()方法。
新建了一个 SuperClass 的对象 superReferToSub 然后指向了对 subObj的引用,
所以说,调用的时候,应该是SuperClass 的对象属性
superRef.method();却调用的是子类的方法输出为SubClass.method(),
superRef调用的子类方法:SuperClass superRef=subObj;
superRef.fritsMethod();却调用的是超类的方法输出为SuperClass .fritsMethod(),他到底调用什么?
你子类里的方法除了第一个方法method(){}覆盖了父类的方法外,其它都只是重写了父类的方法,
相当于在父类的基础上添加了三个新的方法,跟父类method(SuperCalss s, SuperClass s)是平起平座的,superRef=subObj;superRef是SubClass类了,不过因为父类的方法没有被覆盖,那么这种现象肯定是正常的了
父类的对象调用父类的方法,但是method()方法被重写,所以调用了子类的method()方法.
子类却可以调用父类的方法subObj.method(superObj, superObj);