黑马程序员技术交流社区
标题:
写出程序运行结果——已解决
[打印本页]
作者:
王璐
时间:
2012-6-13 20:32
标题:
写出程序运行结果——已解决
本帖最后由 王璐 于 2012-6-15 08:29 编辑
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());
}
}
复制代码
一个例题,写出程序运行结果。其中static A get(){return new B();
}是什么意思?
作者:
伊文龙
时间:
2012-6-13 20:42
static A get(){return new B();
}是什么意思?
静态方法get(),返回值类型我A类,代码主体返回了一个B的对象。
作者:
何旭栋
时间:
2012-6-13 20:48
本帖最后由 何旭栋 于 2012-6-13 20:49 编辑
会报错吧,A接口中没有test()方法
static A get(){return new B()相当于:A a = new B();
作者:
王明明
时间:
2012-6-13 20:55
本帖最后由 王明明 于 2012-6-13 21:04 编辑
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());//编译失败,因为A接口中并未定义test()方法
}
}
复制代码
你可以这样给接口增加一个方法
interface A
{
String test();
}
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());
}
}
复制代码
作者:
黄连兵
时间:
2012-6-13 20:57
A接口中没有申明任何方法,System.out.println(a.test());语句中a.test()是没法通过编译的啊~!
修改成如下代码:运行结果是:yes
其中static A get(){return new B();
定义了一个get方法,首先返回一个B类实例对象,再将其类型提升为A接口。最终获得的是一个A接口。
package com.practise;
interface A {
public String test();
}
class B implements A {
public String test() {
return "yes";
}
}
public class Demo {
static A get() {
return new B();
}
public static void main(String[] args) {
A a = get();
System.out.println(a.test());
}
}
复制代码
作者:
梁清平
时间:
2012-6-13 20:58
static A get()
{
return new B();
}
这个方法的意思是:返回值是接口A类型,这里返回的实现了接口A的子类B的实例。
这段代码是有错误的。。错误如下:
A a=get();
System.out.println(a.test());
这两句相当于 A a = new B();
a是接口A类型的,上面的这一句是没问题的,但是这里的a是不能调用test()方法的。
test()方法是类B的,这里并不够成多态,要知道够成多态的前提有三:继承、重写、父类指向子类。
但是这里并没有重写。。所以不够成多态,接口A中并没有test()方法。。故是错误的!!!
作者:
乐峰
时间:
2012-6-13 21:00
程序会报错:
A a=get();相当于A a=new B();
a.test();这里会出现错误,原因是:A类的类变量a指向其子类B的对象,在编译过程中都要看表达式的左边,左半部分的表达式是A类型的变量,可是test()方法在A类中没有定义。是子类B的特有方法,所以A类型的类变量不能调用test()这个方法。
作者:
邓杰
时间:
2012-6-13 21:07
好好看毕老师的视频吧;这是最基本的东西了;
B implements A\\表示B类实现了A接口;
public String test()
{
return "yes"; 表示test是B类的一个特有方法;返回值类型为String 返回值为“yes”;
}
static A get()
{
return new B();// 返回值类型为A类型的方法; 返回值为B对象;因为B实现了A接口;所以此处正确;
}
A a=get(); A为基类原理同上。所以此处也可以用A来增收B类对象;
a.test()//注意:此处的a是A类型的。而A类型是一个接口;test是B类的特有方法;用A 类的a去调用B类的特有方法肯定是什么报错的;所以结果是不能编译不能通过
因此要想通过编译;就要向下转型 A a=get()改为B a=(B)get();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2