黑马程序员技术交流社区

标题: 【求助】实现接口初始化过程问题 [打印本页]

作者: 黄奕豪    时间: 2012-5-19 09:11
标题: 【求助】实现接口初始化过程问题
本帖最后由 黄奕豪 于 2012-5-19 10:35 编辑
  1. /*
  2.         如下代码:大家都知道子类继承父类的时候,子类新建对象new Zi()的时候得调用其构造函数Zi()对其初始化,而Zi()构造函数又通过super()来调用父类的构造函数来对继承父类的方法和属性先初始化,也可以说在新建new Zi()的时候是先有的父类的age属性和showFu()方法,再有子类的name属性和showZi()方法,那我的问题来了!接口没有构造函数,如果是接口的实现呢?是先有的showJieKou()方法,还是先有showZi()方法?实现接口时子类的加载过程是怎么样的呢?
  3. <font color="red">很抱歉,可能我没表达清楚,我是想弄清楚showZi()和showJieKou()方法在新建对象new Zi()的时候在内存中加载!!还是在新建对象完了,对象调用的时候,再在内存中加载,然后加载的顺序是在样的?</font>*/

  4. class Fu//定义的父类
  5. {
  6.         private age;
  7.         Fu(int a)//父类的构造方法
  8.         {
  9.                 age=a;
  10.         }
  11.         void showFu()
  12.                 {
  13.                         System.out.priintln("Show Fu")
  14.                 }
  15. }
  16. interface JieKou//定义一个接口
  17. {
  18.         void showJieKou();
  19. }
  20. class Zi extends Fu implements JieKou//定义子类,继承Fu,实现JieKou
  21. {
  22.         private name;
  23.         Zi(String n,int a)//子类的构造函数
  24.         {
  25.                 super(a);
  26.                 name=n;
  27.         }
  28.         void showZi()
  29.         {
  30.                 System.out.priintln("Show Zi")
  31.         }
  32.         void showJieKou(){}//对接口的实现
  33. }

  34. class Demo
  35. {
  36.         public static void main(String[] args)
  37.         {
  38.                 Zi z=new Zi("lisi",50);
  39.         ]
  40. }
复制代码

作者: 袁培育    时间: 2012-5-19 09:34
我认为先有谁完全是看你先写谁,因为接口里的方法都没有具体实现方式,等待实现它的类对其进行实现,也就是说,实现接口的类中一定有接口里的所有方法,在加载zi类时,会先加载进接口里的一些成员变量,置于方法应该不用加载吧,毕竟没有具体内容,而且zi类中也都有,何必还要在加进来呢,岂不是占用内存?
作者: 宗士为    时间: 2012-5-19 09:45
class Fu//定义的父类
{
private int age;                                   // private age;
Fu(int a)//父类的构造方法
{
  age=a;
}
void showFu()
  {
   System.out.println("Show Fu");//System.out.priintln("Show Fu")
  }
}
interface JieKou//定义一个接口
{
abstract void showJieKou();                                // void showJieKou();
}

class Zi extends Fu implements JieKou//定义子类,继承Fu,实现JieKou
{
private String name;                        // private name;
Zi(String n,int a)//子类的构造函数
{
  super(a);
  name=n;
}
void showZi()
{
  System.out.println("Show Zi");//System.out.priintln("Show Zi")
}
public void showJieKou(){
         System.out.println("实现接口");
}                //void showJieKou(){}//对接口的实现
}
class Demo
{
public static void main(String[] args){
  Zi z=new Zi("lisi",50);
}                                                                        
}


上面红色部分都是有问题的代码  我已经给改过了   楼主可以看以下  
哥们给接口和继承弄得有点混  
showJieKou()    和  showZi()  是没有关系的
showJieKou()      一个是接口的抽象方法的重写   接口是要实现接口中的抽象方法
showZi() 只是子类的一个方法   
这两个在main中调用哪个就是哪个先加载
这个两个是方法和构方法没关系



作者: 孙宇晨    时间: 2012-5-19 10:09
接口和子类方法是没有直接关系的. 所以他的调用顺序也就没什么标准
无非你先调用哪个就先加载哪个.
继承和接口不是一个东西.不应该拿他们来比较.
作者: 黄奕豪    时间: 2012-5-19 10:30
宗士为 发表于 2012-5-19 09:45
class Fu//定义的父类
{
private int age;                                   // private age;

呵呵,代码手敲出来没注意检验,谢谢您的修改,我是想弄清楚showZi()和showJieKou()在内存中的加载顺序!!你说的先调用谁就先加载谁我会好好思考下的!!
作者: 宗士为    时间: 2012-5-19 10:32
黄奕豪 发表于 2012-5-19 10:30
呵呵,代码手敲出来没注意检验,谢谢您的修改,我是想弄清楚showZi()和showJieKou()在内存中的加载顺序! ...

这个是方法吧 不是构造方法  只有构造方法在new对象才会加载  这个方法我觉得不存在的 你在哪里看过有关这个加载先后的问题吗   有时间发给我看下   学习下

作者: 黄奕豪    时间: 2012-5-19 10:49
宗士为 发表于 2012-5-19 10:32
这个是方法吧 不是构造方法  只有构造方法在new对象才会加载  这个方法我觉得不存在的 你在哪里看过有关 ...

只是今天写多线程实现Runnable接口的时候想不明白是子类的方法先加载,还是run()方法先加载,所以才搞出这个问明白而已!!我自己也在找资料呢!!呵呵!
作者: 宗士为    时间: 2012-5-19 11:00
黄奕豪 发表于 2012-5-19 10:49
只是今天写多线程实现Runnable接口的时候想不明白是子类的方法先加载,还是run()方法先加载,所以才搞出 ...

据我了解这个真是没先后   只有调用才会加载




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