黑马程序员技术交流社区

标题: 请帮忙解答疑惑 [打印本页]

作者: 完美恋爱    时间: 2013-11-29 09:23
标题: 请帮忙解答疑惑
本帖最后由 完美恋爱 于 2013-11-29 22:56 编辑

interface Area
{
        public abstract double getArea();
}

class Zheng  implement  Area
{
        private int chang, kuan;
        Zheng(int chang,int kuan)
        {
                this.chang = chang;
                this.kuan = kuan;
        }
        
        double getArea()
        {
                return chang*kuan;
        }
}

class AreaDemo
{
        public static void main(String[] args)
        {
                Zheng z = new Zheng(3,5);
                double area = z.getArea();
                System.out.println("area = "+area);
        }
}

子类的方法覆盖父类的方法时,要求修饰权限大于或者等于父类的,可这里的父类权限修饰符是public,子类的是default,按理说default权限修饰应该比public小啊!那为什么还能编译通过呢?


作者: 刘敏    时间: 2013-11-29 09:30
class Zheng  
应该是  class Zheng  implements Area 吧

你都没实现接口,谈何覆盖!
作者: 李文帅    时间: 2013-11-29 10:42
楼主的程序中类Zheng并没有实现接口Area,应该是楼主一时大意,忘了写实现接口的代码了吧,所以运行的结果是错误的
如何修改代码,其实只要实现Area接口就行了,即 calss Zheng implements Area
代码修改完毕后,楼主自然会发现上述的程序会报错,也就说明了子类覆盖父类的方法时,子类覆盖方法的权限大于或等于父类方法的权限是必须的
作者: 努力ing    时间: 2013-11-29 12:12
两个类没有任何关系,根本谈不上是覆盖
作者: 执笔梦    时间: 2013-11-29 12:25
无语.....
作者: xibozglr    时间: 2013-11-29 12:35
楼主,你应该先实现接口,然后才能有覆盖

interface Area
{
        public abstract double getArea();
}

class Zheng implements Area
{
        private int chang, kuan;
        Zheng(int chang,int kuan)
        {
                this.chang = chang;
                this.kuan = kuan;
        }
        
       public double getArea()
        {
                return chang*kuan;
        }
}

class AreaDemo
{
        public static void main(String[] args)
        {
                Zheng z = new Zheng(3,5);
                double area = z.getArea();
                System.out.println("area = "+area);
        }
}
作者: --_.Is’攸稀    时间: 2013-11-29 13:23
- -!  没实现implements啊?怎么会有覆盖关系~
作者: 想你的夜    时间: 2013-11-29 15:05
你的需求是要子类 Zheng中要覆盖接口 Area中的getArea();然后来检验其修饰符是吧??楼主?如果是我这个目的的话,那么你的代码错误了,在子类Zheng后面应该加上你继承接口的语句implements Area   我把你的代码改了如下...............................
作者: 想你的夜    时间: 2013-11-29 15:08
想你的夜 发表于 2013-11-29 15:05
你的需求是要子类 Zheng中要覆盖接口 Area中的getArea();然后来检验其修饰符是吧??楼主?如果是我这个目 ...



interface Area
{
        public abstract double getArea();
}

class Zheng    implements Area
{
        private int chang, kuan;
        Zheng(int chang,int kuan)
        {
                this.chang = chang;
                this.kuan = kuan;
        }
        //如果子类继承父类它的可见性不能降低(即你定义的接口中的 getArea()方法为public ,所以子类 Zheng的getArea()必须为public才正确
public      double getArea()
        {
                return chang*kuan;
        }
}

class AreaDemo
{
        public static void main(String[] args)
        {
                Zheng z = new Zheng(3,5);
                double area = z.getArea();
                System.out.println("area = "+area);
        }
}

//如果你要检测其修饰符你自己在我发的代码基础上 子类 Zheng 里面的double getArea()前面该修饰符就是
作者: 完美恋爱    时间: 2013-11-29 22:57
李文帅 发表于 2013-11-29 10:42
楼主的程序中类Zheng并没有实现接口Area,应该是楼主一时大意,忘了写实现接口的代码了吧,所以运行的结果 ...

就你看出来我是一时大意忘写啦!谢谢你的解答,我懂啦!
作者: 李文帅    时间: 2013-11-29 23:10
楼主客气了{:soso_e100:}




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