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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马明良 中级黑马   /  2015-9-3 15:08  /  528 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
                        子类重写父类时要注意的方法:
                                        A:父类的私有方法不可以被重写
                                        B;子类访问权限一定要大于等于父类的方法权限
                                        C:静态的方法只能被静态重写-----这个不算是对象的关系
                                        D:覆盖的应用:
                                                当子类需要父类的功能,而且功能主体子类有自己的特有内容
                                                ,可以复写父类的方法,这样,这样既沿袭了父类的方法有保持了自己的特有内容。






*/
class  Father
{
        private void show(){
       
                System.out.println("这是我的养老金");
        }

        public void method(){
       
                function();
                System.out.println("养老金靠自己存钱缴纳而获得");
                show();
        }

        public static void function(){
       
                System.out.println("养老金的功能对于没有退休金的老年人很重要");
                //method();---->错误原因:---------->function();为静态不能引用非静态的method

        }
        }

class Son extends Father
{
        public void method(){
       
                System.out.println("我要靠自己存钱缴纳而获得");
                super.method();/*用super调用了父类中的method方法,
                父类中method方法有调用了私有的show()和静态的function()
                从而验证了静态只能调用静态方法,和调用父类私有方法的一个公共方法(通过默认无参构造)
                --------父类私有方法子类通过get(参数)+有参构造方法调用的以后再练习*/
        }

        //public static void function()
                public static void function(){
       
                System.out.println("养老金的缴纳对于我也很重要");
        //super.method();静态的方法不能够引用父类中非静态的方法super为非静态
        super.function();该方法引用失败????---------->错误原因:???????求解释(---------- javac ----------
Test5.java:54: 错误: 无法从静态上下文中引用非静态 变量 super
        super.function();//该方法调用失败????---------->错误原因:???????求解释
        ^
1 个错误

输出完成 (耗时 1 秒) - 正常终止
       
        }

}

class Test5{

        public static void main(String[] args)
        {
                //创建父类对象并验证
                Father f=new Father();
                //f.show();
                f.method();
                f.function();
                System.out.println("-----------");


                //创建子类对象并验证
                Son s=new Son();
                //s.show();
                s.method();
                s.function();//不能使用的原因是suoper为静态类
        }
}


4 个回复

倒序浏览
10天的基础班表示有点吃力。。。问题简单请勿见怪。虚心求指导!
回复 使用道具 举报
静态方法中是不允许出现this和super实例对象的关键字。静态方法只能访问静态成员变量和调用静态成员方法。
所以你这如果要调用,只能用类名调用Father.function();
回复 使用道具 举报
细节有错误
回复 使用道具 举报
Ralap军 发表于 2015-9-3 18:18
静态方法中是不允许出现this和super实例对象的关键字。静态方法只能访问静态成员变量和调用静态成员方法。
...

谢谢了,看来细节上还得下功夫啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马