一个抽象类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();
}}今天去面试,不知道这道题怎么做,请大家看看!
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();
}}今天去面试,不知道这道题怎么做,请大家看看!
System.out.println(this.i);
System.out.println(t1.i);
Test2t2 = new test3();
System.out.println(t2.i);
System.out.println(super.i);
System.out.println(Test2.i);
}
public static void main(String[] args) {
Test3 t = new Test3();
t.print();
}
abstract 是继承,所以可以用super.i
interface 是显示。默认好像是静态的 所以。Test2.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是缺省的
}
System.out.println(Test12.i);//因为是接口
我以前还不知道呢,谢谢各位了!
System.out.println(test2.i);abstract 是继承,所以可以用super.i
interface 是实现。
在interface中,所有的成员变量都是默认public final static ,
静态的所以test2.i。
this.i是当前类test3的i了,而题目要求是test2的值。
因为接口中定义的变量隐含了public final static这三个属性,所以第二个应该是
Test2.i
System.out.println(this.i);
好像第一句可以直接i
System.out.println(test2.i);
这不难吧
* @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);
}}
不错的题System.out.println(super.i);
System.out.println(test2.i);
System.out.println(test2.i); //接口的属性可以直接接口名.属性
接口的变量编译器会自动加上static final修饰符..自动变会常量所以只能引用不能修改
test2.i //接口的属性都是 public static final 类型的 所以可以通过接口名.属性直接获得
接口的变量编译器会自动加上static final修饰符,只能引用不能修改路过,学习!
test1 t1 = new test3();
System.out.println(t1.i);
Test2t2 = new test3();
System.out.println(t2.i);
可行
讲过这些东西。
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);
}}
System.out.println(super.i);
System.out.println(test2.i);
接口的属性是final static 的
System.out.println(Test2.i);
这才是正解啊。。
这些孩子。。面向对象基本难道就不懂嘛、
{
System.out.println(super.i);
System.out.println(Test2.i);
}
System.out.println(Test2.i);
{
System.out.println(super.i);
System.out.println(test2.i);
}
System.out.println(super.i);
System.out.println(((Test2)this).i);
//继承了Test1中的 i。[不能this.i,因为this是指本对象]
System.out.println(Test2.i);
//实现了接口,接口中的变量是 static final类型的
// __________________
System.out.println(Test2.i);
// __________________
System.out.println(super.i);
} public static void main(String[] args) {
Test3 t = new Test3();
t.print();
}}
System.out.println(Test2.i);
是正确的.
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);
System.out.println(test2.i);
public void print() {
System.out.println ("Test1: i = " + super.i);
System.out.println ("Test2: i = " + Test2.i);
}
System.out.println(Test12.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试验过!绝对可信
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试验过!绝对可信