站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题多态问题

多态问题

摘要: 多态问题


class Super
{
String greeting()
{
return "hello super";
}

}
class Sub extends Super
{
String greeting()
{
return "Hello sub ";
}

}

class Test
{
public static void main(String[] args)
{
Super s = new Sub();

System.out.println(((Super)s).greeting()); //强制转型为父类

System.out.println(s.greeting());

}
}


运行时输出的都是 Hello sub 而没有 Hello super 、为什么强制转型失效
在不改变类super和类sub的条件下
子类对象怎样才能调用父类到的greeting()方法?



调用那个方法是要看具体这个变量引用的是哪个类的实例对象,你上边再怎么转都还是应用的子类的对象,所以永远调用子类的方法


class Super
{
public static String greeting()
{
return "hello super";
}

}
class Sub extends Super
{
public static String greeting()
{
return "Hello sub ";
}

}

public class Test
{
public static void main(String[] args)
{
Super s = new Sub();

System.out.println(((Super)s). greeting());//强制转型为父类

System.out.println(((Sub)s).greeting());

}
}
这样就可以输出所需要的结果了


new Sub()构造的是子类,具有的当然是子类的属性


xinyingwan()的方法可以。


注意!!!
xinyingwan()的方法严重误导继承的多态表现,因为在他的代码里,两个方法都是静态方法,而静态方法是属于类本身的资源,跟对象和继承没有任何关系!可以直接通过类名来调用!


类方法不涉及到多态了
多态,方法重写优先考虑子类重写的方法

我也加深了理解


xinyingwan() 我说的是在不改变 类sub和类super的情况下 怎么使用父类的方法
静态方法这个我知道


调不到,除非你直接new一个父类对象


同上


同上上


↑返回目录
前一篇: 正则表达试问题
后一篇: 求助一个问题 ?