当前页面: 开发资料首页 → 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一个父类对象
同上
同上上