构造函数与方法的覆盖

子类可以从父类(超类)继承所有的非私有的方法和变量,但子类不继承父类的构造函数。
每个类至少有一个构造函数,如果不写一个构造函数,Java编程语言将提供一个,该构造函数没有参数,面且函数体为空.
如果增加一个带参数的构造函数声明到一个类中,该类以前没有显式构造函数,那么将失去该缺省构造函数.基于这一点,对new Xxxx()的调用将会引起编译错误.这一点很重要.(必须在new的时候写入的参数new Xxxx(xxx,xx)。它的子类也必须显式的批定构造函数。
public Employee(String n){
       name=n;
   }
public Manager(String s,String n){
         super(n);//无论this,super必须放在第一行。
        department=s;  
    }
public class Employee {
    String name;
    int salary;
    public String getDetails(){
        return "ename=" +name+"/n"+
                "eSalary="+ salary;
    }
}
public class Manager extends Employee {
    String department;
    public String getDetails() {
        return "name=" + name + "/n" +
                "Manager of " + department;
    }
}
象大多数面向对象语言一样,JAVA实际上允许引用一个带有变量的对象,这个变量是父类类型的一个.
Employee e =new Manager()
Employee 为父类,Manager是Employee的子类。
变量e,能访问的对象部分只是Emplloyee的一个部分,Manager的特殊是隐藏的。e是一个Employee, 而不是一个Manager。去访问Manager中不是继承父类的属性是非法的。
public class Test {
    public static void main(String args[]){
        Employee e=new Manager();
        e.name="hero";
       System.out.print(e.getDetails());
    }
}
运行结果:
name=hero
Manager ofnull
虽然
Employee e=new Manager();创建的是一个Emplyee,但e.getDetails()调用的并不是Employee的方法,面是
Manager 的方法,因为子类的把父类的方法覆盖了。
子类覆盖父类的方法必须有一个与它所覆盖的方法相同的类型,不以比它覆盖的方法访问性差,不能比它覆盖的方法抛出更多的异常。否则将引起编译错误。
若覆盖的方法参数不一致,将实现多态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值