当前位置: 技术问答>java相关
初学者对于超类和子类的简单问题,请高手赐教!
来源: 互联网 发布时间:2015-02-10
本文导语: 1)Manager boss=new Manager("Carl Hacker",75000); boss.setSecretaryName("Harry Hacker"); Employee staff=new Employee; staff=boss; 2)staff=(Manager) new Manager("Carl Hacker",75000); staff.setSecretaryName("Harry Hacker"); 以上代码...
1)Manager boss=new Manager("Carl Hacker",75000);
boss.setSecretaryName("Harry Hacker");
Employee staff=new Employee;
staff=boss;
2)staff=(Manager) new Manager("Carl Hacker",75000);
staff.setSecretaryName("Harry Hacker");
以上代码中Manager是Employee的子类,setSecretaryName是Manager 的一个方法,
为什么第一种可以,第二种不可以?
|
第一个是对的,“staff=boss;”是增宽cast
第二个不能编译,是因为:
staff的type是父类Employee,而父类不包括setSecretaryName这个方法,
所以不行;如果父类包括setSecretaryName这个方法,则这时就会进行
override,就可以了,这时子类的setSecretaryName方法会被执行,
这是override的一个典型例子
如果setSecretaryName是静态方法,则将会进行hide(而不是override),详见
下面的例子
简单来说,父类中必须有setSecretaryName,这时将会进行override/hide,
否则不能编译
class Father{
public void myMethod0(){
System.out.println("in Father, instance-method");
}
public static void myMethod1(){
System.out.println("in Father, static-method");
}
}
class Son extends Father{
public void myMethod0(){
System.out.println("in Son, instance-method");
}
public static void myMethod1(){
System.out.println("in Son, static-method");
}
}
public class FatherSon{
public static void main(String[] args){
Son son=new Son();
Father father=son;
son.myMethod0();
father.myMethod0();
son.myMethod1();
father.myMethod1();
}
}
输出结果是:
in Son, instance-method
in Son, instance-method
in Son, static-method
in Father, static-method
第二个不能编译,是因为:
staff的type是父类Employee,而父类不包括setSecretaryName这个方法,
所以不行;如果父类包括setSecretaryName这个方法,则这时就会进行
override,就可以了,这时子类的setSecretaryName方法会被执行,
这是override的一个典型例子
如果setSecretaryName是静态方法,则将会进行hide(而不是override),详见
下面的例子
简单来说,父类中必须有setSecretaryName,这时将会进行override/hide,
否则不能编译
class Father{
public void myMethod0(){
System.out.println("in Father, instance-method");
}
public static void myMethod1(){
System.out.println("in Father, static-method");
}
}
class Son extends Father{
public void myMethod0(){
System.out.println("in Son, instance-method");
}
public static void myMethod1(){
System.out.println("in Son, static-method");
}
}
public class FatherSon{
public static void main(String[] args){
Son son=new Son();
Father father=son;
son.myMethod0();
father.myMethod0();
son.myMethod1();
father.myMethod1();
}
}
输出结果是:
in Son, instance-method
in Son, instance-method
in Son, static-method
in Father, static-method
|
打个比方,circle是shape的子类,我们可以说circle是shape,但却不能确定shape一定就是circle,所以不行。
|
派生类是由基类产生的.
所以基类有的派生类上都有.反之则不一定成立.
若有一个人的基"类",都有头,但不一定有"老婆".所以这样一想你就会明白的,是吗?
所以基类有的派生类上都有.反之则不一定成立.
若有一个人的基"类",都有头,但不一定有"老婆".所以这样一想你就会明白的,是吗?
|
我觉得第一个也是不可以的,因为boss中有的方法staff中不一定会有,所以是不能把赋值,而且
如果把第二个中的(Manager)去掉也是可以的吧。我是一位新手,这是我的一些认识 ,不知道对不对,乱说了。
如果把第二个中的(Manager)去掉也是可以的吧。我是一位新手,这是我的一些认识 ,不知道对不对,乱说了。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。