一个抽象类Test1:
public abstract class test1 {
int i=0;
}一个接口Test2:
public interface test2 {
int i=2;
}问题:请在下面横线处填写代码分别输出test1和test2中变量i的值
public class test3 extends test1 implements test2 {

 
public void print()
{
  __________________          __________________     
}
public static void main(String[] args) {
test3 t=new test3();
t.print();
}}今天去面试,不知道这道题怎么做,请大家看看!

解决方案 »

  1.   

    System.out.println(super.i);
    System.out.println(this.i);
      

  2.   

    test1 t1 = new test3();
    System.out.println(t1.i);
    Test2t2 = new test3();
    System.out.println(t2.i);
      

  3.   

            public void print(){

    System.out.println(super.i);
    System.out.println(Test2.i);
    }

    public static void main(String[] args) {

    Test3 t = new Test3();

    t.print();

    }
      

  4.   

    3楼的正确
    abstract 是继承,所以可以用super.i
    interface 是显示。默认好像是静态的 所以。Test2.i。
    记得不太清楚了
      

  5.   

    这个题很特别, 这个问题是代码风格有问题引起的.在这里,要打印test1的i,可以用:
    System.out.println(super.i); 
    System.out.println(((test1)this).i);要打印test2的i,可以用:
    System.out.println(Test2.i);
    System.out.println(((test2)this).i); 
    把test2类修改如规范编码可以避免此问题:
    public interface ITest2 { 
      public final static int I=2; //这里public final是缺省的
      

  6.   

    System.out.println(super.i);//因为继承了
    System.out.println(Test12.i);//因为是接口
      

  7.   

      为什么接口的属性可以直接用类.属性这种形式呢,题目中没有把接口的属性i定义为static的!
    我以前还不知道呢,谢谢各位了!
      

  8.   

    System.out.println(super.i); 
    System.out.println(test2.i);abstract 是继承,所以可以用super.i 
    interface 是实现。
    在interface中,所有的成员变量都是默认public final static ,
    静态的所以test2.i。
      

  9.   

    哦,对啊,你说我才记起来在interface中,所有的成员变量都是默认public final static , 呵呵,谢谢了!
      

  10.   


    this.i是当前类test3的i了,而题目要求是test2的值。
    因为接口中定义的变量隐含了public final static这三个属性,所以第二个应该是
    Test2.i
      

  11.   

    System.out.println(i); 
    System.out.println(this.i);
    好像第一句可以直接i 
      

  12.   

    System.out.println(super.i); 
    System.out.println(test2.i); 
    这不难吧
      

  13.   

    package com.yihaijian;public class test3 extends test1 implements test2 { /**
     * @param args
     */
    public static void main(String[] args) {

    test3 t3 = new test3();

    t3.print();
    }


    public void print() {
    test1 t1 = (test1) this;
    test2 t2 = (test2) this;
    System.out.println(t1.i);
    System.out.println(t2.i);
    }}
      

  14.   

    呵呵
    不错的题System.out.println(super.i); 
    System.out.println(test2.i); 
      

  15.   

    static的一般不推荐以對象來引用,而樓主好奇接口的i為何是static,因為接口聲明的字段默認public static的
      

  16.   

    System.out.println(super.i);  //调用父类的属性输出 
    System.out.println(test2.i);  //接口的属性可以直接接口名.属性
    接口的变量编译器会自动加上static final修饰符..自动变会常量所以只能引用不能修改
      

  17.   

    super.i //继承中调用父类的属性
    test2.i //接口的属性都是 public static final 类型的 所以可以通过接口名.属性直接获得
    接口的变量编译器会自动加上static final修饰符,只能引用不能修改路过,学习!
      

  18.   

    在interface中,所有的成员变量都是默认public final static主要考的就是这个
      

  19.   

    this.i会有歧义
    test1 t1 = new test3(); 
    System.out.println(t1.i); 
    Test2t2 = new test3(); 
    System.out.println(t2.i); 
    可行
      

  20.   

    咳,都开发JAVA一年了,看到这道题刚开始还有写懵.
      

  21.   

    我们这学期刚学JAVA
    讲过这些东西。
      

  22.   

    接口中属性默认是 static final 的!
      

  23.   


    public class Test3 extends Test1 implements Test2{ public static void main(String[] args) {
    Test3 t=new Test3();
     t.print();
    } private void print() {
    Test1 t1=this;
        System.out.println(t1.i);
        Test2 t2=this;
        System.out.println(t2.i);
    }}
      

  24.   

    System.out.println(Test2.i);
    System.out.println(super.i);
      

  25.   

    System.out.println(super.i); 
    System.out.println(test2.i); 
      

  26.   


    接口的属性是final  static 的
      

  27.   

    System.out.println(super.i); 
    System.out.println(Test2.i);
    这才是正解啊。。 
    这些孩子。。面向对象基本难道就不懂嘛、
      

  28.   

    public void print() 

    System.out.println(super.i); 
    System.out.println(Test2.i); 
      

  29.   

    System.out.println(super.i);
    System.out.println(Test2.i);
      

  30.   

        public void print() 
        {
            System.out.println(super.i);
            System.out.println(test2.i);
        } 
      

  31.   

     
    System.out.println(super.i);
    System.out.println(((Test2)this).i);
      

  32.   

    我测试了:System.out.println(super.i);
    //继承了Test1中的 i。[不能this.i,因为this是指本对象]
    System.out.println(Test2.i);
    //实现了接口,接口中的变量是 static final类型的
      

  33.   

    public class Test3 extends Test1 implements Test2 { public void print() {
    // __________________
    System.out.println(Test2.i);
    // __________________
    System.out.println(super.i);

    } public static void main(String[] args) {
    Test3 t = new Test3();
    t.print();
    }}
      

  34.   

    System.out.println(super.i);
    System.out.println(Test2.i);
    是正确的.
      

  35.   

    继承的话用supe调用~抽象类还是需要new个对象滴!
      

  36.   

    有个最强的那就是反射了!
    print方法中的代码:
    try {
      Class Test2Class = Class.forName("test2");
    Test2Class.getFields();
    System.out.println(Test2Class.getField("i").getInt(null));
    }catch (Exception e) {
    e.printStackTrace();
    }
    System.out.println(super.i);
      

  37.   

    從開始學Java到現在,這個問題我已經看到過N次了,呵呵~~~
      

  38.   

    System.out.println(super.i);
    System.out.println(test2.i);
      

  39.   

    System.out.print(((Test1) this).i + " " + ((Test2) this).i);
      

  40.   


    public void print() {
        System.out.println ("Test1: i = " + super.i);
        System.out.println ("Test2: i = " + Test2.i);
    }
      

  41.   

    System.out.println(super.i);//因为继承了 
    System.out.println(Test12.i);//因为是接口
      

  42.   

    System.out.println(super.i); 
    System.out.println(test2.i); abstract 是继承,所以可以用super.i 
    interface 是实现。 
    在interface中,所有的成员变量都是默认public final static , 
    静态的所以test2.i。 
      2楼解法正典。
    test1 t1 = new test3(); 
    System.out.println(t1.i); 
    Test2t2 = new test3(); 
    System.out.println(t2.i);
      3楼解法精妙。
    以上两法均可,本人eclipse试验过!绝对可信
      

  43.   

    System.out.println(super.i); 
    System.out.println(test2.i); abstract 是继承,所以可以用super.i 
    interface 是实现。 
    在interface中,所有的成员变量都是默认public final static , 
    静态的所以test2.i。 
      2楼解法正典。
    test1 t1 = new test3(); 
    System.out.println(t1.i); 
    Test2t2 = new test3(); 
    System.out.println(t2.i);
      3楼解法精妙。
    以上两法均可,本人eclipse试验过!绝对可信