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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yueyouqiang 中级黑马   /  2014-8-2 21:56  /  2214 人查看  /  17 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 接口:
  3.         常量:public static final int NUM = 3;
  4.         方法:public abstract void show();

  5.         特点:
  6.                 1、接口是对外暴露的规则;
  7.                 2、接口是程序的功能扩展;
  8.                 3、接口可以多实现;
  9.                 4、类与接口之间是实现关系,而且可以继承一个类的同时实现多个接口;
  10.                 5、接口与接口之间可以有继承关系,可以多继承。

  11.         接口是不可以创建对象的,因为接口中的方法全是抽象方法。

  12.         接口需要被子类实现,子类对接口中的所有抽象方法进行覆盖后,子类才可以实例化;
  13.         如果未覆盖完,那子类也是一个抽象类。
  14. */

  15. interface InterA
  16. {
  17.         public static final int NUM = 3;
  18.         public abstract void show();
  19. }

  20. interface InterB
  21. {
  22.         public abstract void method();
  23. }

  24. interface InterC extends InterB,InterA//多继承
  25. {
  26.        
  27.         public abstract void method1();
  28. }

  29. class Demo1
  30. {
  31.         public void function()
  32.         {
  33.                 System.out.println("d");
  34.         }
  35. }

  36. //继承一个父类且实现一个接口,由于接口InterC继承了InterB,InterA
  37. //所以show(),method(),method1()三个方法都要覆盖。
  38. class Demo2 extends Demo1 implements InterC
  39. {
  40.         //public  int NUM = 5;
  41.         //public final int NUM = 5;
  42.         //public static final int NUM = 5;
  43.         public void show()
  44.         {
  45.                 System.out.println("a");
  46.         }
  47.         public void method()
  48.         {
  49.                 System.out.println("b");
  50.         }
  51.         public void method1()
  52.         {
  53.                 System.out.println("c");
  54.         }
  55. }

  56. class Interface
  57. {
  58.         public static void main(String[] args)
  59.         {
  60.                 Demo2 d2 = new Demo2();

  61.                 d2.show();
  62.                 d2.method();
  63.                 d2.method1();
  64.                 d2.function();
  65.                 System.out.println(d2.NUM);
  66.         }
  67. }
复制代码

在Demo2中定义
public  int NUM = 5;
public final int NUM = 5;
public static final int NUM = 5;
这三个都可以啊
而且最后System.out.println(d2.NUM);
打印的结果是5

这些怎么理解??

17 个回复

倒序浏览
程序已试无问题输出结果:
a
b
c
d
3
估计你软件有问题,关了再开或者换一个试试就好了.
回复 使用道具 举报
同楼上。要知道整程序中都没出现变量等于5,是不可能输出5的。
回复 使用道具 举报
人家的意思//public  int NUM = 5;
        //public final int NUM = 5;
        //public static final int NUM = 5;
把//去掉,为啥不是接口中定义的final的3,而是是子类中的num=5
对于变量,自己类中的就用自己类的num,不用父类中的num
回复 使用道具 举报
虽然继承父类,父类中也有相同的变量,但运行的时候会先在本类中寻找,如果本类中有此变量那么就用本类中的变量,如果本类中没有就会运行父类中的参数,所有运行结果为5
回复 使用道具 举报
lpc4276139 发表于 2014-8-3 23:24
人家的意思//public  int NUM = 5;
        //public final int NUM = 5;
        //public static final i ...

在子类和父类的定义同名时,父类的方法会被重写,而父类中的变量会被隐藏,所以,结果还是子类的。
楼主可以把这句话当做一条定律来记住。
回复 使用道具 举报
子类继承了父类后,子类有,就会使用子类自己的,子类没有才会把父类的拿过来
回复 使用道具 举报
陈立凯 发表于 2014-8-3 21:42
同楼上。要知道整程序中都没出现变量等于5,是不可能输出5的。

在Demo2中定义
public  int NUM = 5;
public final int NUM = 5;
public static final int NUM = 5;
这三个都可以啊
回复 使用道具 举报
尘埃落定 发表于 2014-8-4 08:46
在子类和父类的定义同名时,父类的方法会被重写,而父类中的变量会被隐藏,所以,结果还是子类的。
楼主 ...

恩恩,那加final没关系吗
回复 使用道具 举报
yueyouqiang 发表于 2014-8-4 17:27
恩恩,那加final没关系吗

楼主,我和他说的一样,你也不操理一下,呜呜呜。伤心
回复 使用道具 举报
yueyouqiang 发表于 2014-8-4 17:27
恩恩,那加final没关系吗

;没关系,子父类中的变量有不同的内存存储。
回复 使用道具 举报
lpc4276139 发表于 2014-8-4 22:56
楼主,我和他说的一样,你也不操理一下,呜呜呜。伤心

什么操理?????
回复 使用道具 举报
yueyouqiang 发表于 2014-8-6 01:42
什么操理?????

额。好吧,你不懂这两个字。。就是你都不理我的意思
回复 使用道具 举报
不明白。
回复 使用道具 举报
lpc4276139 发表于 2014-8-6 11:16
额。好吧,你不懂这两个字。。就是你都不理我的意思

哦哦,好吧,那加你QQ,我们聊聊?
回复 使用道具 举报

怎么?还没看到这?
回复 使用道具 举报
yueyouqiang 发表于 2014-8-6 13:28
哦哦,好吧,那加你QQ,我们聊聊?

你的多少,我加你吧
回复 使用道具 举报
lpc4276139 发表于 2014-8-6 14:30
你的多少,我加你吧

QQ:416899926
skype\MSN:yueyouqiang@live.com
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马