我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java继承使用实例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java继承使用实例分析

本篇内容介绍了“Java继承使用实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承的作用:通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。

在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

class 父类{
    ...       //成员变量、成员方法
}
class 子类 extends 父类{
    ...       //类体
}

例如:

class teacher{             //声明一个teacher类为父类    String name;             //定义父类的成员变量name、age       int age;    void show(){           //定义父类成员方法,将成员变量输出        System.out.println(name);               System.out.println(age);     }}class Student extends teacher {     //声明一个Student类为子类并继承父类}public class myfirst {    public static void main(String[] args) {    System.out.println("学生");    Student student=new Student();     //声明一个Student类的实例对象student    student.name="Tom";                //子类调用父类的成员变量name并赋值    student.age=19;                    //子类调用父类的成员变量age并赋值    student.show();                    //子类调用父类的成员方法show    }}

运行结果为:

学生
Tom
19

注意:

  • 子类不能选择性继承父类;

  • Java不支持多重继承,但一个类可以实现多个接口,从而克服单继承的缺点;

  • 构造方法不会被子类继承,但可以从子类中调用父类的构造方法。

继承的优点

  • 继承过来的字段和方法,可以像任何其他字段和方法一样被直接使用;

  • 在子类中可以声明一个与父类中同名的新字段或静态方法,从而“隐藏”父类中的字段或方法;

  • 可以在子类中声明一个在父类中没有的新字段和方法;

  • 可以在子类中编写一个父类当中具有相同名的新实例方法,这称为“方法重写”或“方法覆盖”;

  • 可以在子类中编写一个调用父类构造方法的子类构造方法,既可以隐式地实现,也可以通过使用关键字super来实现。

重写和隐藏父类方法

子类继承了父类中的所有成员及方法,但在某种情况下,子类中该方法所表示的行为与其父类中该方法所表示的行为不完全相同,例如,在父类语言中定义了说话这个方法,而在子类中说话的方法是不同的:外国人说英文,中国人说中文,这时我们就需要重写或隐藏父类的该方法。

重写父类中的方法

当一个子类中一个实例方法具有与其父类中的一个实例方法相同的签名(指名称、参数个数和类型)和返回值时,称子类中的方法“重写”了父类的方法。例如:

class A{    public void sayHello() {                      //输出英文欢迎        System.out.println("Hello,Welcome to Java!!!");    }    public void sayBye() {        System.out.println("GoodBye,everyone");    }}class B extends A {               public void sayHello() {                      //输出中文欢迎          System.out.println("大家好,欢迎学习Java!!!");    }}public class myfirst {    public static void main(String[] args) {    B b=new B();                                //创建子类B的一个实例对象,使用默认构造方法    b.sayHello();                               //调用子类中重写的方法    b.sayBye();                                 //调用父类中的方法    }}

运行结果为:

大家好,欢迎学习Java!!!
GoodBye,everyone

注意:重写的方法具有与其所重写的方法相同的名称、参数数量、类型和返回值。

隐藏父类中的方法

如果一个子类定义了一个静态类方法,而这个类方法与其父类的一个类方法具有相同的签名(指名称、参数格式和类型)和返回值,则称在子类中的这个类方法“隐藏”了父类中的该类方法。

  • 当调用被重写的方法时,调用的版本是子类的方法;

  • 当调用被隐藏的方法时,调用的版本取决于是从父类中调用还是从子类中调用。

class A{    public static void sayHello() {             //静态类方法        System.out.println("大家好,这是A的静态类方法");    }    public void sayHello2() {                   //实例方法        System.out.println("大家好,这是A中的实例方法");    }}class B extends A {        public static void sayHello() {             //静态类方法        System.out.println("大家好,这是B的静态类方法");    }    public void sayHello2() {                   //实例方法        System.out.println("大家好,这是B的实例方法");    }}public class myfirst {    public static void main(String[] args) {        B b=new B();                           //创建B类的实例对象b        A a=b;                                 //隐式对象类型转换        A.sayHello();                          //调用A类的静态类方法        a.sayHello();                          //调用a对象的静态类方法        B.sayHello();                          //调用B类的静态方法        a.sayHello2();                         //调用a对象的实例方法        b.sayHello2();                         //调用b对象的的实例方法        A a2=new A();                          //创建A类的实例对象a2        a2.sayHello2();                        //调用a2对象的实现方法    }}

运行结果为:

大家好,这是A的静态类方法
大家好,这是A的静态类方法
大家好,这是B的静态类方法
大家好,这是B的实例方法
大家好,这是B的实例方法
大家好,这是A中的实例方法

可以看出,得到调用的隐藏方法是父类中的方法,而得到调用的重写方法是子类中的方法。

方法重写和隐藏后的修饰符

在子类中被重写的方法,其访问权限允许大于但不允许小于被其重写的方法,例如:父类中一个受保护的实例方法(protected)在子类中可以是公共的(public)的,但不可以是私有的(private)。如果一个方法在父类中是static方法,那么在子类也必须是static方法;如果一个方法在父类中是实例方法,那么在子类中也必须是实例方法。

子类访问父类私有成员

子类继承其父类的所有public和protected成员,但不能继承其父类的private成员。那么如何在子类中访问到父类中的字段呢,我们可以在父类中提供用来访问其私有字段的public或protected方法,子类使用这些方法来访问相应的字段。例如:

class A{                     //父类A    private int value=10;    //声明一个私有变量value并赋值为10    public int getvalue() {  //声明一个公有成员方法getvalue,返回value        return value;    }}class B extends A{           //A的子类B}public class myfirst {        public static void main(String[] args) {      B b=new B();           //创建子类B的一个实例对象      System.out.println("子类通过父类提供的公共接口访问A中的私有字段value:"+b.getvalue());    }}

运行结果为:

子类通过父类提供的公共接口访问A中的私有字段value:10

使用super关键字

使用super调用父类中重写的方法、访问父类中被隐藏的字段
子类重写了父类中的某一个方法,隐藏父类中的字段,假如想在子类中访问到父类中被重写的方法和隐藏父类的字段,可以在子类中通过使用关键字super来调用父类中被重写的方法和访问父类中被隐藏的字段。例如:

package first;class A{    public String name="张飞";         //添加成员变量    public void say() {                //添加成员方法say        System.out.println("我是父类A成员方法say");    }}class B extends A{    public String name="关羽";         //与父类中同名的字段,隐藏父类    public void say(){                 //重写方法say        super.say();                   //使用super关键字调用父类中的方法        System.out.println("我是子类B成员方法say");        System.out.println("父类的name名字:"+super.name); //使用super关键字访问父类中的变量    }}public class myfirst {    public static void main(String[] args) {      B b=new B();                     //创建子类的一个实例对象      b.say();                         //调用子类中重写的方法      System.out.println("子类的name名字:"+b.name);   //调用子类中的name    }}

运行结果为:

我是父类A成员方法say
我是子类B成员方法say
父类的name名字:张飞
子类的name名字:关羽

使用super调用父类的无参数构造方法/有参数构造方法

子类不继承其父类的构造方法。

  • 当使用无参数的super()时,父类的无参数构造方法就会被调用;

  • 当使用带有参数的super()方法时,父类的有参数构造方法就会被调用。

例如:

class SuperClass {              //创建父类SuperClass      private int n;            //声明一个私有变量n      SuperClass(){             //父类无参数构造方法        System.out.println("这是父类SuperClass无参数构造方法");      }      SuperClass(int n) {       //父类有参数构造方法        System.out.println("这是父类SuperClass有参数构造方法");        this.n = n;      }    }    class SubClass extends SuperClass{     // SubClass类继承SuperClass类      private int n;                       //声明一个私有变量n      SubClass(){                          // 自动调用父类的无参数构造器        System.out.println("这是子类无参数构造方法");      }              public SubClass(int n){              //子类有参数构造方法        super(300);                        //调用父类中带有参数的构造器        System.out.println("这是子类有参数构造方法"+n);        this.n = n;      }    }public class myfirst {    public static void main(String[] args) {            SubClass sc1 = new SubClass();      //创建子类SubClass实例对象,调用其无参数构造方法            SubClass sc2 = new SubClass(100);   //创建子类SubClass实例对象,调用其有参数构造方法    }}

运行结果为:

这是父类SuperClass无参数构造方法
这是子类无参数构造方法
这是父类SuperClass有参数构造方法
这是子类有参数构造方法100

注意

  • 如果要初始化父类中的字段,可以在子类的构造方法中通过关键字super调用父类的构造方法;

  • 对父类的构造放的调用必须放在子类构造方法的第一行;

  • 如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器;

  • 如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表;

  • 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。

附:继承的使用和认识

继承是怎么实现的?

使用extends 和 implements 关键字

extends 继承的都是对象

implements 继承实现并实现的是接口

在继承的场景下,同一样东西,怎么区分是你老爹的还是你自己的?

使用super 与 this 关键字

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

this关键字:指向自己的引用。

父类的某些方法不想被子类继承,怎么处理?

对方法或属性进行 private 关键字或final关键字修饰

private 关键字修饰,子类无法使用和继承

final关键字修饰,无法继承,但是否可以被使用需要看权限属性

“Java继承使用实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java继承使用实例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java继承使用实例分析

本篇内容介绍了“Java继承使用实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!继承继承就是子类继承父类的特征和行为,使得子类对象(实
2023-06-29

Java继承应用实例分析

这篇文章主要介绍“Java继承应用实例分析”,在日常操作中,相信很多人在Java继承应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java继承应用实例分析”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-30

Java的继承实例分析

这篇文章主要介绍“Java的继承实例分析”,在日常操作中,相信很多人在Java的继承实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的继承实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-06-29

Kotlin继承实例分析

本篇内容介绍了“Kotlin继承实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Kotlin中所有的类都有一个公有的超类:Any,这是
2023-06-17

java线程池中类的继承实例分析

这篇文章主要介绍java线程池中类的继承实例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了Web MVC设计模
2023-06-14

JavaScript原型与继承实例分析

今天小编给大家分享一下JavaScript原型与继承实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先我们需要知道的
2023-06-27

Java中继承和多态的示例分析

这篇文章给大家分享的是有关Java中继承和多态的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言首先我们如果要使用Java中存在的包,可以程序中使用import语句导入包。包说通俗点就是一个文件夹,为了
2023-06-20

javascript中实现继承的示例分析

小编给大家分享一下javascript中实现继承的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!类式继承//声明父类//声明父类function SuperClass() { this.superValue =
2023-06-27

Maven的继承与聚合实例分析

这篇文章主要介绍“Maven的继承与聚合实例分析”,在日常操作中,相信很多人在Maven的继承与聚合实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Maven的继承与聚合实例分析”的疑惑有所帮助!接下来
2023-07-02

C++继承方式的示例分析

这篇文章给大家介绍C++继承方式的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++支持多种程序设计风格,其中就包括对面向对象设计的支持。我们今天在这里将会为大家详细介绍一下各种C++继承方式的具体应用方法,
2023-06-17

Java中封装、继承和多态的示例分析

这篇文章主要介绍Java中封装、继承和多态的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!封装所谓的封装就是把类的属性和方法使用private修饰,不允许类的调用者直接访问,我们定义如下一个类,可以看到所有的
2023-06-15

JavaScript组合继承的示例分析

这篇文章主要为大家展示了“JavaScript组合继承的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript组合继承的示例分析”这篇文章吧。原型链继承父类实例作为子类的原型
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录