A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯旭君 中级黑马   /  2012-3-12 09:30  /  1457 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//father.function2();(虽然静态方法不推荐这样调用)调用的问什么是父类的方法?

public class AbstractClassTest {
       
        public static void main(String[] args) {
               
                AbstractFather father = new TheSub();
               
                father.function1();
               
                AbstractFather.function2();
                TheSub.function2();
               
                father.function2();//为什么不调用子类的方法???
               
                father.function3();//调用的是子类的方法
               
               
               
        }
       
       

}


abstract class AbstractFather{
       
        public abstract void function1();
       
        public static void function2(){
               
                System.out.println("hello function()2 of theFather");
               
        }
       
        public void function3(){
                System.out.println("hello funcion()3 of theFather");
        }
       
}

class TheSub extends AbstractFather{

        @Override
        public void function1() {
                // TODO Auto-generated method stub
               
                System.out.println("hello funciont1 of TheSub");
               
        }
       
        public static void function2(){
               
                System.out.println("hello function2 of TheSub");
               
        }
       
        public void function3(){
                System.out.println("hello funcion()3 of TheSub");
        }
       
}

5 个回复

倒序浏览
由于AbstractFather的function2()是static的,而静态方法是类的方法,不是类的实例的方法,不能被导出类覆盖。
回复 使用道具 举报
father.function1();//父类抽象方法没方法体:父类没方法体必须子类复写才能调用
               
                AbstractFather.function2();//静态的父类方法
                TheSub.function2();        //子类静态方法
               
                father.function2();//为什么不调用子类的方法???、//因为是静态的:”静态“是指能被类调用,
               
                father.function3();//调用的是子类的方法   //普通的复写父类方法

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
父类function2是静态方法,直接用类名就可以调用,静态后就不会被复写了。
回复 使用道具 举报
王睿 发表于 2012-3-12 10:44
父类function2是静态方法,直接用类名就可以调用,静态后就不会被复写了。

嗯,我是故意让引用调用的。静态方法是不能被重写的。只有非静态的方法才能够被重写。
回复 使用道具 举报
package Diversify;
//关于多态,多方求解之后方得到正确答案
import static Test_purview.print.*;
import Test_initalized.neum;

public class Test_diversifyTest1 {
        public static void main(String[] args){
                Cycle c = new Cycle();
                c.ride1();
                print(" 车轮数:"+c.ride(neum.Bicycle).wh);
                Unicycle c1 = new Unicycle();
                c1.ride1();
                print(" 车轮数:"+((Unicycle)c1.ride(neum.Unicycle)).wh);
                print(" 车轮数:"+((Unicycle)c1.ride(neum.Unicycle)).wh1);
//                依然有疑问,按照程序的执行来看得到的返回类型是Cycle,但是为什么是Cycle还是不是很了解,但是正确的做法就是这样
//                把返回的Cycle类型强制转换成Unicycle类型就能得到正确的wh了
//                向下面这样子会得到的结果是0而不是4,因为遵循就近原则,哪儿近就得到哪儿的
//                print(" 车轮数:"+c1.ride(neum.Unicycle).wh);
        }
}
class Cycle{
         int wh = 0;
         public void ride1(){
                 System.out.println("This Is Class Cycle111111111111111111111111");
         }
        public Cycle(){
                print("This is in The class Cycle!");
        }
        public Cycle ride(Object o){
                print("Class: "+ this);
                return this;
        }
}

class Unicycle extends Cycle{
         int wh1 = 4;
         public void ride1(){
                 System.out.println("This Is Class Unicycle22222222222222222222222222");
         }
        public Unicycle(){
                print("This is in The class Unicycle!");
        }
        public Unicycle ride(Unicycle o){
                print("Class: "+ this);
                return this;
        }
}
class Bicycle extends Cycle{
        int wh = 2;
        static void ride(){
                 System.out.print("This Is Class Bicycle");
         }
        public Bicycle(){
                print("This is in The class Bicycle!");
        }
}
class Tricycle extends Cycle{
        int wh = 3;
        public Tricycle(){
                print("This is in The Tricycle!");
        }
}

//Output:
//This is in The class Cycle!
//This Is Class Cycle111111111111111111111111
//Class: Diversify.Cycle@61de33
// 车轮数:0
//This is in The class Cycle!
//This is in The class Unicycle!
//This Is Class Unicycle22222222222222222222222222
//Class: Diversify.Unicycle@ca0b6
// 车轮数:0
//Class: Diversify.Unicycle@ca0b6
// 车轮数:4
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马