美文网首页
Java学习之继承

Java学习之继承

作者: MNZERO | 来源:发表于2015-08-12 23:08 被阅读61次

1.什么是继承?

继承是在一些比较一般的类(超类)的基础上构造、建立、扩充新类(子类)的一种手段。并且子类与超类之间一般存在is-a关系,例如:在理论上来说,在Manager与Employee之间存在着明显的is-a关系。is-a关系是继承的一个明显的特征。

2.继承的作用

  • 继承简化了人们对事物的认识和描述,能清晰的体现相关类间的层次结构关系。
  • 继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要在描述与超类(类A)不同的少量特征(数据成员和成员方法)即可。这种方法能减少代码量和数据冗余度,大大增加程序的重用性。
  • 继承通过增强一致性来减少模块间的接口与界面,大大增加了程序的易维护性。
  • 提供了多重继承机制。从理论上来说,一个类可以多个超类的 子类 ,它可以从多个 超类 中继承属性与方法,这便是多继承。但java处于安全性和可靠性的考虑,仅支持单重继承,而通过接口机制来实现多重继承。

3.注意点

  • 当在子类中的方法不是在超类中定义的,超类的对象就不能使用它。
  • 当超类与子类具有相同的方法时,子类中的方法会覆盖超类的这个方法
  • 子类中可以增加域、增加方法或覆盖超类的方法,然而决不能删除继承的任何域或者方法。

4.实例(以下代码来自于 Java核心卷|

  1. inheritance/ManagerTest.java

     package inheritance;
     public class ManagerTest{
         public static void main(String[] args){
         //constrcut a Manager object
         Manager boss = new Manager("Cracker",80000,1988,12,15);
         boss.setBonus(5000);
         Employee[] staff = new Employee[3];
         //fill the staff arry with Manager and Employee object
         staff[0] = boss;
         staff[1] = new Employee("Harry",50000,1986,10,1);
         staff[2] = new Employee("Tommy",40000,1987,3,15);
         //print out information about all Employee objects
         //体现了多态与动态捆绑
         for(Employee e : staff)
             System.out.println("name:" + e.getName() + ",salary:" + e.getSalary());
         }
     }
    
  2. inheritance/Employee.java

     package inheritance;
     
     import java.util.Date;
     import java.util.GregorianCalendar
     public class Employee {
     private String name;
     private double salary;
     private Date hireDay;
    
         public Employee(String n,double s ,int year,int month,int day){
             name = n;
             salary = s;
             GregorianCalendar calendar = new GregorianCalendar(year, month-1, day);
             hireDay = calendar.getTime();
         }
    
         public String getName(){
             return name;
         }
         public double getSalary(){
             return salary;
         }
    
         public Date getHireDay(){
             return hireDay;
         }
    
         public void raiseSalary(double byPercent){
             double raise = salary * byPercent / 100;
             salary += raise;
         }
     }
    
  3. inheritance/Manager.java

    package inheritance;
    //Manager类继承了Employee类  
    public class Manager extends Employee{
    private double bonus;   
        public Manager(String n, double s, int year, int month, int day){
            //利用super关键词调用Employee类的构造器
            super(n, s, year, month, day);
            bonus = 0;
        }
        //覆盖了Employee类中的getSalary方法
        public double getSalary(){
            //用super关键字调用Employee类的方法
            double baseSalary = super.getSalary();
            return baseSalary + bonus;
        }
        public void setBonus(double b){
            bonus = b;
        }
    }
    

5.super关键字的使用(实例中出现的问题)

  • super调用超类的方法

    使Manager类中的getSalary方法返回薪水和奖金的总和,由于Employee类中的salaryprivate,所以在Manager类中用使用超类的salary时需使用super来调用。

  • super调用超类的构造器

    1. 由于Manager类的构造器不能访问Employee类的私有域,所以必须利用Employee类的构造器对这部分私有数据进行初始化。
    2. 使用 super调用构造器的语句必须是子类构造器的第一条语句。
    3. 如果子类的构造器没有显式地调用超类的构造器,则将自动调用超类的默认(没有参数)的构造器。

相关文章

  • Kotlin学习之继承

    Kotlin学习之继承 @(Kotlin学习) Kotlin中的继承模式与Java中存在差异: Kotlin中所有...

  • Java学习之继承

    1.什么是继承? 继承是在一些比较一般的类(超类)的基础上构造、建立、扩充新类(子类)的一种手段。并且子类与超类之...

  • java培训专家介绍java的特性之:继承

    java培训专家介绍java的特性之:继承 什么是继承?java特性继承又是什么?在线教育平台专家为你解答! 多个...

  • 2017-12-29

    Java学习日记(4) 主要谈一下——继承extends 个 Tips : Java不像c++,Java是单继承(...

  • Kotlin随笔,这次坚持不太监

    Kotlin中的类与继承 Java三大特性继承、多态、封装Java学习中首先学习的是类的构建,那么必然要学习构造方...

  • JAVA学习之继承篇(四)

    一. 继承相当于:is a 比如狗类继承至动物类,即狗是一种动物 二. 注意: 子类继承父类的所有public属性...

  • Java高级学习之1:继承

    继承的概念:继承就是子类继承父类的特征和行为;但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自...

  • Java之继承

    继承的概念 继承的格式 继承示例 继承中成员变量的访问特点 继承中成员方法的访问特点

  • Java之继承

    继承 关键字:extends继承的作用:为了实现代码复用。对于所有子类,将公有的属性和方法定义在父类中,子类通过继...

  • java之继承

    一、基础 引入类的继承的作用:代码重用 语法:[修饰符列表] class 子类名 extends 父类名{类体;}...

网友评论

      本文标题:Java学习之继承

      本文链接:https://www.haomeiwen.com/subject/csniqttx.html