A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 没有退路 初级黑马   /  2019-9-18 23:40  /  562 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.为何需要继承?
先念一遍定义?:利用继承,人们可以基于已存在的类构造一个新类。继承已存在的类就是复用(继承)这些类的方法和属性。在此基础上,还可以添加一些新的方法和属性,以满足新的需求。这是Java程序设计中的一项核心技术。
举个具体的栗子:我们有一个Employee类来表示公司的员工,这个公司中经理的待遇与普通雇员的待遇存在这一些差异。不过,他们之间也存在这很多相同的地方例如,他们都领薪水。只是普通的员工在完成本质工作后仅领取薪水,而经理在完成了预期的业绩之后还能得到奖金。这种情况就需要使用继承。这是因为需要为经理定义一个新类Manager,以便增加一些新功能。但可以重用Employee类中已经编写的部分代码。
敲黑板了,下面是具体的格式。
//创建一个Manager类继承employee类//关键字:extends(继承)public class Manager extends Employee{  private double bonus;  ...//此处省略  public void setBonus(double bonus) {  this.bonus = bonus;  }}
关键字extends表明正在构造的新类派生于一个已存在的类。已存在的类称为超类、基类或父类(Employee);新类称为子类(Manager)。
2.继承到了什么?
现在我们先写父类(Employee)与子类(Manager)的代码
//定义父类public class Employee{   public String name;   private int id;   private double salary;   public void setName(String name){   this.name = name;}   public void Name(){   System.out.println("Employee类中的方法,员工名是"+name);}   public double getSalary(){    return salary;}   public int getId(){     return id;}}//创建一个子类Managerpublic class Manager extends Employee{  private double bonus;  public void setBonus(double bonus){   this.bonus = bonus;}  public static void main(String[] args){   Manager m1 = new Manager();   //调用方法:这些方法是从父类中继承来的   m1.setName("张三");   m1.Name();}  }
Manager类时Employee类的子类,当Manager继承了Employee后,Manager中就自动具有了Employee中定义的属性和方法。
如运行下列代码:
程序输出如下:
这就证明,我们创建的Manager对象调用Name方法时,实际上时调用它从父类中继承来的方法:
当然,Manager类中还可以再定义他自己特有的方法,以此来应对不同的情况。
  • 注意:对于子类特有的方法,一定是子类类型的对象才能调用,如我们定义的setBonus方法,必须是Manager类型的对象才能调用!
3.自动转型与强制转型
当Manager类继承Employee类后,我们可以这样说:一个Manager的对象一定是一个Employee对象。所以我们可以在程序这如此表述:
自动转型示例:// Employee E1 = new Manager();
public static void main(String[] args){    //创建一个Manager类对象,将对象类型定义为Employee类型    Employee E1 = new Manager();    E1.setName("我是张三");    E1.Name();    //子类转型为父类类型后不能调用子类特有的方法    E1.setBonus(50); //false    //将父类类型的对象强制转成子类类型    Manager E2 = (Manager)E1;    //强制转型后我们就可以调用子类特有的方法了    E2.setBonus(50);}
如上例所述:如果一个对象被自动转型为父类类型后还想调用子类特有的方法,则必须要强制转型。
  • 注意:如果一个对象可以被强制转型,那么肯定是在前面某个地方被自动转型过!
4.方法的重写
子类继承父类后,就可以直接调用父类中的方法,但是在很多时候,父类定义的只是一个很抽象的方法,无法精细具体地解决问题,或者是不同的情况,这个方法需要变通。比如说大学生和小学生都要学习,但是学的方法和内容都不一样。那这种情况怎么办呢?
这个时候有一个办法叫做方法的重写。即子类可以据需要来重写定义父类中的方法。
代码示例:
public class Manager extends Employee{ //重写父类中的Name方法  public void Name(){  System.out.println(name+"经理是这个部门的主管。");}}
调用后的输出结果是:
  • 重写时需注意的要点:
  • 方法的访问权限不能小于父类中的访问权限。
这个时候有人就会问了访问权限是啥子?
现在我来简述一下访问权限的种类及区别:
default是默认的意思,就是你省略不打时的状态。
2. 返回值类型 方法名 (参数类型 x,参数类型 y, ... ){ }
上述格式中的”返回值类型“,”方法名“ 及 ”参数类型“都得与父类中的方法保持一致。
重写的是方法体。

5.多态的概念
多态是指由于继承和重写机制,相同类型的对象调用相同的方法,得到的结果可能不一样。
在前面的例子中Manager对象和Employee对象我们都可以认为是Employee对象,他们都在调用Name()方法,但是结果可能不一样,这是因为每个子类对象都可能会重写了这个方法。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马