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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 完美恋爱 高级黑马   /  2013-11-29 09:23  /  1776 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 完美恋爱 于 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小啊!那为什么还能编译通过呢?

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
class Zheng  
应该是  class Zheng  implements Area 吧

你都没实现接口,谈何覆盖!
回复 使用道具 举报
楼主的程序中类Zheng并没有实现接口Area,应该是楼主一时大意,忘了写实现接口的代码了吧,所以运行的结果是错误的
如何修改代码,其实只要实现Area接口就行了,即 calss Zheng implements Area
代码修改完毕后,楼主自然会发现上述的程序会报错,也就说明了子类覆盖父类的方法时,子类覆盖方法的权限大于或等于父类方法的权限是必须的
回复 使用道具 举报
两个类没有任何关系,根本谈不上是覆盖
回复 使用道具 举报
无语.....
回复 使用道具 举报
楼主,你应该先实现接口,然后才能有覆盖

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);
        }
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

回复 使用道具 举报
- -!  没实现implements啊?怎么会有覆盖关系~
回复 使用道具 举报
你的需求是要子类 Zheng中要覆盖接口 Area中的getArea();然后来检验其修饰符是吧??楼主?如果是我这个目的的话,那么你的代码错误了,在子类Zheng后面应该加上你继承接口的语句implements Area   我把你的代码改了如下...............................
回复 使用道具 举报
想你的夜 发表于 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()前面该修饰符就是

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 赞一个!

查看全部评分

回复 使用道具 举报
李文帅 发表于 2013-11-29 10:42
楼主的程序中类Zheng并没有实现接口Area,应该是楼主一时大意,忘了写实现接口的代码了吧,所以运行的结果 ...

就你看出来我是一时大意忘写啦!谢谢你的解答,我懂啦!
回复 使用道具 举报
楼主客气了{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马