Java基础之继承和多态

前述

名词解释:父类是被继承的类,子类是继承父类的类;
如:class Employee{…}, class Manager extends Employee{…}
Employee 是父类,Manager 是子类;

子类能使用父类的所有公共方法和属性,并且能添加自己的属性和方法

正确覆写父类方法

  1. 当覆写的方法中有调用父类的方法,需要加上super,附代码片段
//这是父类中的方法
public double getSalary(){
  return this.Salary;
}
//这是在子类中被覆写的方法
public double getSalary(){
  return super.getSalary()+this.bonus;
}
  1. 覆写的子类方法的访问权限不能比父类方法小
  2. 父类的属性如果被private修饰,子类不能直接访问,通过调用父类的公共方法访问私有属性

写子类构造器的前提

  1. 如果子类的构造器没有显式地调用父类的构造器(没用super(…)),系统默认调用父类的无参构造器,若父类没有无参构造器,编译器将会报错
    在这里插入图片描述
  2. 若子类构造器调用了super(),它一定要放在其他语句的前面

多态和他的兄弟动态绑定

		Employee[] staff =new Employee[3];
		staff[0] = new Manager("Tom",70000,30000);
		staff[1] = new Employee("Harry",65000);
		staff[2] = new Employee("Time",30000);
for(Employee e : staff) {
	 System.out.println("name="+e.getName()+",Salary="+e.getSalary()+",ID="+e.getID());
}

多态:看上面代码可以发现,staff被定义成Employee类型,但他引用了一个Manager类(Manager 是 Employee 的子类)的对象,这是完全正确的,这便是多态,即一个变量可以引用不同类的对象(这些类满足父类和子类的关系,是一条继承链而不是多条)。

动态绑定:这体现在第二段代码,e是Employee类(父类)的变量,System.out语句中的getSalary方法被子类覆写,且staff[0]引用的是Manager类(子类)的对象,那staff[0]调用的getSalary方法是父类的还是子类的呢?答案是子类的getSalary方法,这涉及到了父类与子类的相互转换,不懂且有兴趣的可以看一下我之前写的。

final:我要阻止继承

final 用在属性上使其只能通过构造器初始化,之前讲过;
final 用在方法上使其不能被覆写;
final 用在修饰类上,可以阻止继承,任何类不能继承它,如String类便是如此,不能被继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值