Java学习之继承

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. 如果子类的构造器没有显式地调用超类的构造器,则将自动调用超类的默认(没有参数)的构造器。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 5继承 5.1 类、超类和子类 重用部分代码,并保留所有域。“is-a”关系,用extends表示。 已存在的类被...
    我快要上天啦阅读 763评论 1 3
  • 一、继承 当两个事物之间存在一定的所属关系,即就像孩子从父母那里得到遗传基因一样,当然,java要遗传的更完美,这...
    玉圣阅读 1,045评论 0 2
  • 一. 继承相当于:is a 比如狗类继承至动物类,即狗是一种动物 二. 注意: 子类继承父类的所有public属性...
    南三号阅读 345评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,567评论 18 399
  • 在我的记忆里,我是从初中开始写日记的。然后到高中,大学,基本上都保持了写日记的习惯。后来毕业后出来工作,慢慢...
    林家三公子阅读 573评论 1 5