黑马程序员技术交流社区

标题: Java的多态问题 [打印本页]

作者: 生牛排    时间: 2016-7-25 18:41
标题: Java的多态问题
我在子类写了一个静态方法,里面调用了父类的一个静态方法,为什么会报错?
作者: toby_ustb    时间: 2016-7-25 18:47
首先,静态方法和静态属性都是可以被继承的。静态方法属于类本身,并不属于某一个对象,报错的原因应该是你的调用方式不对,比如类A , A的一个对象a,你在其子类B中如果要调用父类的静态方法要通过A.method()这种方式调用,而不是a.method()调用。请问你是怎么调用父类方法的
作者: 骚动的石头    时间: 2016-7-25 19:07
应该不会吧,methon()或者父类名字.methon()   都可以调用吧
作者: 李铮    时间: 2016-7-25 19:42
类名.调用就可以了吧
作者: 生牛排    时间: 2016-7-25 21:10
李铮 发表于 2016-7-25 19:42
类名.调用就可以了吧

非静态的方法也可以用类.方法()吗
作者: zby15217172590    时间: 2016-7-25 23:45
生牛排 发表于 2016-7-25 21:10
非静态的方法也可以用类.方法()吗

非静态的不行
作者: Frank_Ms1ZR    时间: 2016-7-26 06:41
静态的方法类名点调用就可以了
作者: java627    时间: 2016-7-26 21:14
父类的静态方法不能被子类继承,就算你在子类中写一个和父类一模一样的静态方法,那也只能算是子类的,不是父类的。
作者: itismyhao    时间: 2016-7-26 23:11
java627 发表于 2016-7-26 21:14
父类的静态方法不能被子类继承,就算你在子类中写一个和父类一模一样的静态方法,那也只能算是子类的,不是 ...

父类的静态方法是可以被继承的,也可以被子类的方法覆盖.
作者: AlanMTuring    时间: 2016-7-26 23:45
itismyhao 发表于 2016-7-26 23:11
父类的静态方法是可以被继承的,也可以被子类的方法覆盖.

对  静态方法也可以被继承
作者: java627    时间: 2016-7-27 00:03
[Java] 纯文本查看 复制代码
public class Fu {
        public static void show() {
                System.out.println("父类的静态方法");
        }
        public void method() {
                System.out.println("父类的一般方法");
        }
}
public class Zi extends Fu {
        public static void main(String[] args) {
                Fu fu = new Zi();
                fu.show();
                fu.method();
        }
        public static void show() {
                System.out.println("子类的静态");
        }
        public void method() {
                System.out.println("子类的一般方法");
        }
       
}

输出结果
父类的静态方法
子类的一般方法

作者: HeiMa2Wangkunpe    时间: 2016-7-27 00:09
代码贴出来吧 这样 我们不会猜
作者: java627    时间: 2016-7-27 00:31
java627 发表于 2016-7-27 00:03
[mw_shl_code=java,true]public class Fu {
        public static void show() {
                System.out.println("父类的静 ...

你可以自己敲代码试试,你要不理解我解释的,明天可以问问老师。
作者: itismyhao    时间: 2016-7-27 13:41
java627 发表于 2016-7-27 00:03
[Java] 纯文本查看 复制代码
public class Fu {
        public static void show() {
                System.out.println("父类的静 ...

[mw_shl_code=applescript,true]class Person
{
        public static void show()
        {
                System.out.println("Person");
        }
}
class Student extends Person
{
/*        public static void show()
        {
                System.out.println("Student");
        }*/
}
class Demo
{
        public static void main(String[] args)
        {
                Student s=new Student();
                s.show();
        }
}
子类什么都不写的时候,是可以执行show()
输出为Person
去掉多行注释
输出为Student
作者: java627    时间: 2016-7-27 21:34
itismyhao 发表于 2016-7-27 13:41
[mw_shl_code=applescript,true]class Person
{
        public static void show()

有待商榷。。。。
作者: itismyhao    时间: 2016-7-27 22:37
java627 发表于 2016-7-27 21:34
有待商榷。。。。

同学,你有没有想过,你用父类调用的静态方法是用类名.方法名调用的?
作者: 13411939415    时间: 2016-7-27 22:37
首先看了上面各位大神的评论,我得说一点,静态方法不是说只能用类名.来调用,也可以通过该类所创建的对象来调用,你们可以试试。
作者: Kaweh.    时间: 2016-7-27 22:41
你得把代码贴出来,才好解决
作者: wyq0627java11    时间: 2016-7-27 22:56
静态方法可以被继承,子类运行,首先会运行父类静态方法,然后运行子类静态方法,你在子类静态方法中又调用父类的静态方法就会报错,因为静态方法只能运行一次!!!
作者: qetu001212    时间: 2016-7-27 23:36
这个要看你到底是怎么写的。。。估计是你用法错了。。。
作者: 13411939415    时间: 2016-7-28 00:25
wyq0627java11 发表于 2016-7-27 22:56
静态方法可以被继承,子类运行,首先会运行父类静态方法,然后运行子类静态方法,你在子类静态方法中又调用 ...

兄弟,感觉你静态代码块和静态方法已经搞混了吧
作者: zhangjiesss    时间: 2016-7-28 07:29
大神们,看啦你们的代码,父类中静态的成员可以被继承,在多态里如果有静态方法,编译看左,运行也看做
作者: lynch123    时间: 2016-7-28 21:25
仔细查查,是否拼错了
作者: itismyhao    时间: 2016-7-28 23:57
java627 发表于 2016-7-26 21:14
父类的静态方法不能被子类继承,就算你在子类中写一个和父类一模一样的静态方法,那也只能算是子类的,不是 ...

找不到你的帖子了,在这回复你吧
今天问了两个老师.给的不同的答案
一个老师静态不牵扯继承不继承,但具体给我解释清楚,我也不好意思深究.
另一个老师说的跟我想的差不多,如果子类没有与父类一模一样的静态方法,子类是可以继承父类的静态方法的.如果有一模一样的话,那么他们的静态方法各自归属两个类,与继承无关.并且静态方法无法被重写.
两个老师都同意了我的猜想-->子类继承父类,所以子类是父类的一种,因此可以解释为什么子类可以用子类类名.方法名的方式调用父类的静态方法.

同学你有问老师吗,你那边给的什么解释?
作者: java627    时间: 2016-7-29 00:30
itismyhao 发表于 2016-7-28 23:57
找不到你的帖子了,在这回复你吧
今天问了两个老师.给的不同的答案
一个老师静态不牵扯继承不继承,但具体 ...

我得到的答案是父类的静态方法不能被子类继承,字符类中就算有一模一样的静态方法,那也是各自的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2