zoukankan      html  css  js  c++  java
  • Java知多少(27)继承的概念与实现

    继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。

    继承可以理解为一个类从另一个类获取方法和属性的过程。如果类B继承于类A,那么B就拥有A的方法和属性。

    继承使用 extends 关键字。

    例如我们已经定义了一个类 People:

    1 class People{
    2     String name;
    3     int age;
    4     int height;
    5    
    6     void say(){
    7         System.out.println("我的名字是 " + name + ",年龄是 " + age + ",身高是 " + height);
    8     }
    9 }

    如果现在需要定义一个类 Teacher,它也有 name、age、height 属性和 say() 方法,另外还需要增加 school、seniority、subject 属性和 lecturing() 方法,怎么办呢?我们要重新定义一个类吗?


    完全没必要,可以先继承 People 类的成员,再增加自己的成员即可,例如:

     1 class Teacher extends People{
     2     String school;  // 所在学校
     3     String subject;  // 学科
     4     int seniority;  // 教龄
     5    
     6     // 覆盖 People 类中的 say() 方法
     7     void say(){
     8         System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教龄");
     9     }
    10    
    11     void lecturing(){
    12         System.out.println("我已经" + age + "岁了,依然站在讲台上讲课");
    13     }
    14 }

    对程序的说明

    • name 和 age 变量虽然没有在 Teacher 中定义,但是已在 People 中定义,可以直接拿来用。
    • Teacher 是 People 的子类,People 是Teacher 类的父类。
    • 子类可以覆盖父类的方法。
    • 子类可以继承父类除private以为的所有的成员。
    • 构造方法不能被继承。


    继承是在维护和可靠性方面的一个伟大进步。如果在 People 类中进行修改,那么 Teacher 类就会自动修改,而不需要程序员做任何工作,除了对它进行编译。

    单继承性:Java 允许一个类仅能继承一个其它类,即一个类只能有一个父类,这个限制被称做单继承性。后面将会学到接口(interface)的概念,接口允许多继承。

    最后对上面的代码进行整理:

     1 public class Demo {
     2     public static void main(String[] args) {
     3         Teacher t = new Teacher();
     4         t.name = "小布";
     5         t.age = 70;
     6         t.school = "清华大学";
     7         t.subject = "Java";
     8         t.seniority = 12;
     9         t.say();
    10         t.lecturing();
    11     }
    12 }
    13 class People{
    14     String name;
    15     int age;
    16     int height;
    17    
    18     void say(){
    19         System.out.println("我的名字是 " + name + ",年龄是 " + age + ",身高是 " + height);
    20     }
    21 }
    22 class Teacher extends People{
    23     String school;  // 所在学校
    24     String subject;  // 学科
    25     int seniority;  // 教龄
    26    
    27     // 覆盖 People 类中的 say() 方法
    28     void say(){
    29         System.out.println("我叫" + name + ",在" + school + "教" + subject + ",有" + seniority + "年教龄");
    30     }
    31    
    32     void lecturing(){
    33         System.out.println("我已经" + age + "岁了,依然站在讲台上讲课");
    34     }
    35 }

    运行结果:

    我叫小布,在清华大学教Java,有12年教龄
    我已经70岁了,依然站在讲台上讲课

    注意:构造方法不能被继承,掌握这一点很重要。 一个类能得到构造方法,只有两个办法:编写构造方法,或者根本没有构造方法,类有一个默认的构造方法。

     系列文章:

    Java知多少(上)

    Java知多少(中)

  • 相关阅读:
    ASP.NET Core 基于JWT的认证(二)
    ASP.NET Core 基于JWT的认证(一)
    C#数据Encrypt加密Encrypt解密的算法使用--非对称算法RSACryptoServiceProvider
    C#数据Encrypt加密Encrypt解密的算法使用
    C# 实现winform自动悬浮
    测试winform自动悬浮
    C#实现图像拖拽以及锚点缩放功能
    C# Microsoft.Office.Interop.Owc11 导出excel文件
    Docker修改daemon.json后无法启动的问题
    Kubernetes命名空间
  • 原文地址:https://www.cnblogs.com/Coda/p/4395513.html
Copyright © 2011-2022 走看看