黑马程序员技术交流社区
标题:
面向对象,练习中的问题
[打印本页]
作者:
黑马-王鹏
时间:
2013-3-18 08:56
标题:
面向对象,练习中的问题
本帖最后由 黑马-王鹏 于 2013-3-18 11:34 编辑
interface A{}
class B implements A
{
public String test()
{
return "yes";
}
}
class Demo
{
static A get()//什么意思?
{
return new B();
}
public static void main(String[] args)
{
A a=get();//什么意思?
System.out.println(a.test());
}
}//<FONT color=red>1,求A a=get(); static A get() 在程序中的注解?
//2.求运行结果并解释哈为什么?谢谢</FONT>
复制代码
作者:
HM张超
时间:
2013-3-18 09:01
static A get()//什么意思? 静态方法!如果不是本类调用需要类名点反方名。
A a=get();//什么意思?创建A对象 然后调用get方法给a对象赋值!
作者:
刘松老师
时间:
2013-3-18 09:14
楼主程序会出现编译错误,static A get() 方法是为了得到一个A类的对象,A a=get()可以理解为A a = new B(); 是java中多态的表现,而System.out.println(a.test());是调用A类中test方法,,成员函数在多态调用是,编译的时候是看左边的,运行时看右边,而A类中没有test方法,所以编译错误。
作者:
android2050
时间:
2013-3-18 09:32
interface A{}
class B implements A
{
public String test()
{
return "yes";
}
}
class Demo
{
static A get()//定义一个static静态的方法返回值为A类型(定义成static是为了主方法中调用)
{
return new B();
}
public static void main(String[] args)
{
A a=get();//get()完整的写法是this.get(),表示本类中的get()方法,将get()方法的返回值A(实际上该语句等同于A a = new B();)
System.out.println(((B)a).test());//该条语句才正确,test()方法是子类所特有的,父类对象要调用必须强转成子类对象。
}
}
复制代码
祝你学习进步!
作者:
郝强勇
时间:
2013-3-18 09:51
本帖最后由 郝强勇 于 2013-3-18 10:00 编辑
interface A{}
class B implements A
{
public String test()
{
return "yes";
}
}
class Demo
{
static A get()//什么意思?回答:定义了一个静态的get方法,方法的返回值是A类型的,方法体中返回的是B的实例对象,由于B是A接口的实现类,
所以代码可行,这即体现了多态的特点也体现了面向接口编程的思想。
{
return new B();
}
public static void main(String[] args)
{
A a=get();//什么意思?回答:调用自己Demo类中的get方法,方法的返回值为A类型的,用A类型的a接受一下返回值。
get返回值是A类型的B的实例对象,所以B的实例对象调用自己的test方法,也可行。
System.out.println(a.test());//最后打印输出yes。
}
}
这段代码不复杂,但体现了一个很好的编程思想,也囊括了几个重要的知识点。
作者:
黑马-王鹏
时间:
2013-3-18 10:10
陈团辉 发表于 2013-3-18 09:32
祝你学习进步!
第一个问回答的很给你,第二个问虽然编译通过了,但和我提的问不符合
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2