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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄珊珊 中级黑马   /  2012-8-30 13:53  /  1548 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄珊珊 于 2012-8-31 11:32 编辑

子类Demo 继承父类 并实现接口父类中的一个成员是 q=1;接口中有一个常量为q=2;那么new Demo(); 是实现父类中的成员还是接口中的常量?

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

9 个回复

倒序浏览
这个q异常了    new Demo();中  虚拟机不知道执行哪个里面的q
回复 使用道具 举报
包晗 发表于 2012-8-30 18:17
这个q异常了    new Demo();中  虚拟机不知道执行哪个里面的q

一般出现这种异常,如何修改,如何定义来避免呢?
回复 使用道具 举报
本帖最后由 魏-玉-彪 于 2012-8-30 19:07 编辑

虚拟机分不清你要的是那个,只能异常。将父类和接口中的成员 和接口中的常量定义成不同名称即可
回复 使用道具 举报
interface father
{
        int q=2;
}
class father2
{
        int q;
}
public class Test extends father2 implements father {
        
        public static void main(String[] args) {
                father2 f2 = new father2();
                f2.q=1;
                Test test = new Test();
                System.out.println(father.q);
                System.out.println(f2.q);
        }
}
楼主,你是这个意思吗?这可以访问啊
回复 使用道具 举报
黑马张涛 发表于 2012-8-30 19:07
interface father
{
        int q=2;

interface father
{
        int q =2;
}
class father2
{
        int q = 1;
}

class Test extends father2 implements father
{
        public void show()
        {
                System.out.println(q);
        }
        public static void main(String[] args)
        {
                new Test().show();
        }
}
回复 使用道具 举报
interface father
{
        int q =2;
}


class father2 extends father1
{
        int q = 1;
}

class Test extends father2
{
        public void show()
        {
                System.out.println(q);
        }
        public static void main(String[] args)
        {
                new Test().show();
        }
}


不过这样很乌龙,没什么意义
回复 使用道具 举报
  System.out.println(father.q);//new father2().q  那这就看你到底需要访问那个了,直接输一个q不行,编译器不知道执行那个
回复 使用道具 举报
明白了,谢谢!
回复 使用道具 举报
interface Inter
{
        public static final int q = 2;
        public abstract void show();
}
class Demo implements Inter
{
        int q = 1;
        public void show(){}
}
class interfaceDemo  
{
        public static void main(String[] args)
        {
                Demo d = new Demo();
                System.out.println(d.q);
        }
}
在这个程序中最后输出的是子类中的q,我想应该是这样的:
接口中的成员变量只能定义为常量存在于常量池中并没有存在于子类对象中所以创建子类对象调用q时优先调用子类中的q,所以最后输出的结果应该是1.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马