首页 > 其他分享 >面向对象(下):继承

面向对象(下):继承

时间:2024-10-22 13:45:26浏览次数:3  
标签:定义 构造方法 继承 子类 面向对象 methodA 父类 方法

继承是面向对象(下)的第一节内容,也是后面整个面向对象(下)的学习基础,务必掌握扎实,对后面的学习会很有帮助。大二初学,欢迎各位大佬批评指正、不胜感激!

继承:对共性进行抽取,达到代码的复用。父类→共性,子类→个性。 

句式:public(修饰符) class 子类 extends 父类 

先上一张面向对象(下)的思维导图,把各个知识点都罗列出来,这样看得更清楚。

1c3232c54fe74240b702f1f1bb673335.jpeg

 

 一、熟悉继承的基本用法

(1)先定义了一个父类Animal类,定义了三个成员变量:姓名、年龄、颜色。之后分别是eat和sleep方法,无参数,返回值类型为void,分别打印语句:在吃饭和在睡觉。

0133386f86b14f6ba5b11abf139dad0e.png

 

(2)之后定义了一个子类Dog类,并继承父类Animal,继承语法格式:修饰符 class                    子类 extends 父类;在子类中定义了一个子类独有的bark方法,用于打印汪汪叫,这是狗才有的属性,其他动物都没有。吃饭和睡觉是所有动物都有的属性,直接从父类继承,不用再在子类中重新写一遍。

bd6f914fbaf14afda77a8959e33a6582.png

(3)最后是Test1测试类,在main方法中实现前面所有的方法。

通过new关键字实例化创建了一个Dog类对象dog,并通过“对象.属性”给dog方便赋值为“小王”和“3”,并分别打印狗的名字和年龄。之后分别调用eat、sleep、bark方法。eat和sleep方法是父类所有的,所有子类都可以调用,bark方法是Dog子类独有的,只有Dog类对象才能调用。

15f2756b10974576bdec3d37e98a3079.png

(4)输出结果:bark是子类独有的方法,打印狗汪汪汪。

62c190587e3a437fab65b38d3379ac56.png

 

二、访问父类成员(遵循就近原则)

(1)先定义了一个父类Animal,然后定义了两个整形变量a和b,然后定义了一个methodA方法和一个methodB方法,分别打印语句“Animal中的methodA()方法”和“Animal中的methodB()方法”。

bc5386ed1d2f4717b84c2da6919eb68a.png

(2)然后定义了一个子类Dog,继承父类Animal。定义了一个整形变量c,然后定义了一个method方法,无参数,返回值类型,并分别给a、b、c赋值,访问的a和b都是从父类中继承下来的,c是访问子类自己的c,然后定义了一个methodA方法和methodB方法,返回值类型为void,methodA方法的参数为int a,methodB方法无参数,并分别打印各自语句。

e5dc8a5bd0de4e56b25e42d0ae665253.png

然后在Dog子类中定义了一个在methodC方法 ,返回值类型为void,无参数。先调用无参数methodA方法,访问的是父类中的methodA方法;然后调用有参数的methodA方法,访问的是子类的methodA(int)方法。最后调用无参数methodB方法,访问的是子类的methodB方法。

通过这个例子可以看出:访问父类的成员变量和方法遵循就近原则。子类有就优先访问子类自己的,子类没有则向父类中找,子类父类都没有则编译器报错。

8e44908704044f1ca278967923392099.png

(3)在测试类Test1中,定义了main方法,通过new关键字实例化创建了一个Dog类对象dog1,然后调用methodC方法 。

addecf792bf841578a759a9f64acb046.png

(4)输出结果:

9b1a42b375d54e25a3dbd0d5d8cfa792.png

 

三、super关键字

(1):先定义了一个父类Animal, 分别定义了两个整型变量a和b,然后定义了两个方法methodA方法和methodB,返回值类型为void,无参数。分别打印methodA()和methodB()语句。

ca09f7c781154030b13ee1e9ae31423b.png

(2):定义了一个Dog子类,继承父类Animal,然后定义了两个返回值类型为void的methodA方法和methodB方法,methodA方法参数为int a,methodB方法无参数,并分别打印methodA方法和methodB方法的语句。

之后定义了一个methodC方法,将子类的a和b分别赋值为100和200。

super关键字:在子类中调用父类方法和属性,因为就近原则,都是优先访问子类方法和变量,如果专门要访问父类方法和变量,要用super关键字。

将父类的a和b分别赋值为300和400,之后调用无参methodA方法,访问的是父类的methodA方法,然后调用有参methodA方法,访问的是子类的methodA方法。

再接着调用无参methodB方法,访问的是子类的methodB方法,子类父类也是无参,但优先访问的是子类。super.methodB()访问的是父类的methodB方法,super关键字专门在子类中访问父类变量和方法。

8ede8d95c1e24f89a7190c0981d54e56.png

(3):最后定义了一个测试类Test1,在main方法中通过new关键字实例化创建了一个Dog类对象dog,然后调用methodC方法。

6ccb4838956444989ab3b9274d3ce58a.png

(4):输出结果:

248c86e26c4c4daa884082dc88f73123.png

 

 

四、 子类构造方法:

定义:先有父后有子。子类对象构造时,需要先调用父类构造方法,然后执行子类的构造方法。

(1):定义了一个Animal父类,并定义了一个Animal构造方法,打印Animal语句。

0ff825cf46eb4fce9a49d4e4772f3124.png

(2):定义了一个子类Dog,继承子类Animal,定义了一个Dog的构造方法,并打印Dog语句。

 6a95c65bb61944ec8b139ce0bbb20296.png

(3):最后在测试类Test1和main方法中,通过new关键字实例化了一个Dog类对象dog,调用构造方法。

3d77a6a7193a4a2e80e09672bcd2529f.png

(4):输出结果:分别打印父类和子类的构造方法,先调用父类的构造方法,再调用子类的构造方法。

023e90c0edd2422fb52a2363a7f80551.png

 

 

五、再谈初始化(代码块、构造方法的执行顺序)

(1)父类Animal,定义了name和age两个成员变量,先定义了一个无参构造方法,再定义了一个有参构造方法,打印有参构造方法语句。下面分别是实例代码块和静态代码块,分别打印各自的语句。

62cd77ea66b44acdb558b725659edb0d.png

(2):子类Dog继承Animal父类,定义了一个有参构造方法,并通过super关键字调用父类的name和age,打印有参构造方法的语句。下面分别是实例代码块和静态代码块,并分别打印各自的语句。

929ea33bf4aa40f2a6d38c3955840e7b.png

(3):Test1测试类,main方法,new关键字实例化创建了两个对象dog1和dog2,并分别给姓名缓和年龄赋值。 86db28be77ef4b8b81e234228363a60e.png

(4):输出结果:

从中可以看出代码块和构造方法的执行顺序为:

父类静态代码块最先执行,子类静态代码块然后执行,且静态代码块都只执行一次,再次创建对象时父类和子类静态代码块均不会执行。

紧接着父类的实例代码块和构造方法先后执行,最后执行子类的实例代码块和构造方法。

总结一句话:先静态,只一次。再父类,终子类。先代码块,后构造方法。

a5b796d7614541308e59de394447ed7d.png

 

六、final关键字

(1):final关键字修饰变量后,变量的值将不能再被改变。这里定义了一个父类Animal,然后定义了一个整形变量a,用final修饰,并赋值为10,打印a,下面再将a赋值为20,此时编译器报错,因为a用final修饰,不能再被更改。

d03fdb74db414628ab18bdd08f53a1be.png

(2):final关键字修饰的类不能被继承。定义了一个子类Dog,这里继承父类Animal,此时编译器报错。因为父类Animal此前已被final修饰,故不能被子类Dog继承。 1391a252b6fe48798d9ccd9ac4d858fa.png

(3):final关键字修饰的方法不能被重写。在父类和子类都定义了一个show方法,父类的show方法用final修饰,此时编译器在子类的show方法出报错,因为被final修饰的方法不能被重写

785ce77279024ce794f162d76f5cd50e.png

 

七、super和this:

相同点:都是关键字,都只能在非静态方法中使用,在构造方法调用时,必须是构造方法中的第一条语句。且不能同时存在。

不同点:this是当前对象的引用,super相当于是子类对象中从父类继承下来部分成员的引用。

this()用于调用本类构造方法,super()用于在子类中调用父类构造方法。

 

八、java不支持多继承:不能一个类继承多个类。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:定义,构造方法,继承,子类,面向对象,methodA,父类,方法
From: https://blog.csdn.net/gdswsj/article/details/143135390

相关文章

  • 【JAVA】第二张_面向对象
    引言Java面向对象是一种编程方法论,它将软件系统看作是一组对象的集合,每个对象都有自己的状态和行为,并且能够相互之间进行通信和协作。java面向对象知识的思维导图1、面向对象思想面向对象(Object-Oriented)是一种编程思想和方法论,它的核心理念是将问题拆解成由对象组成的模......
  • 【28】C++派生和继承的实现
    除了“构造函数”和“析构函数”,父类的所有成员函数,以及数据成员,都会被子类继承!下面的是自写的一段父类和子类的派生和继承Man(父类)  .h#pragmaonce#include<string>usingnamespacestd;classMan{public: Man(); Man(stringname,intage); ~Man(); st......
  • 初始面向对象(上)
    大二学生,初始面向对象上,刚开始感觉颇有难度,不过经过反复思考和写代码后,难度也就相应降下来了。个人认为学java很重要一点就是要针对每个模块的知识做思维导图,这样各个知识点的联系就一清二楚了,这样写代码的时候才能写得更快。初学java,做的思维导图还有待完善。如果有的地方有错......
  • 继承的定义:
    在原有类的基础上定义一个类,原有类称为父类,新类称为子类class类名extends父类名(类体)classAniaml(){varleg=4defrun():Unit={println("animalrun....")}}//继承:不劳而获classDogextendsAniaml(){}objectTest17{defmain(args:Array[String......
  • Scala的继承(不劳而获)
    Scala中继承的定义为在原有类的基础上定义一个新类,原有类称为父类,新类称为子类 定义:在原有的基础上定义一个新类,原有类称为父类,新类称为子类。class子类名extends父类名 {类体}【问】当子类从父类继承的方法不能满足需要时,子类需要有自己的行为,怎么办?此时使用ove......
  • 【STC15】面向对象的.h/.c程序架构
    .h文件#ifndef__MAIN_H_#define__MAIN_H_/*Includes------------------------------------------------------------------*/#include<STC15.h>/*externvariables-----------------------------------------------------------*//*externfunctionprot......
  • 面向对象与设计模式第一课:深入理解OOP
    第三章:面向对象与设计模式第一课:深入理解OOP面向对象编程(OOP)是一种编程范式,它将程序结构视为由对象组成,促进了代码的重用性和可维护性。在这一课中,我们将深入分析OOP的四个基本特性:封装、继承、多态和抽象,并提供相应的示例与实践。1.OOP基本特性1.1封装封装是OOP的核心......
  • 【Java SE 】继承 与 多态 详解
     ......
  • Java面向对象之多态,向上转型我们大家庭的由来
    各位看官早安午安晚安呀如果您觉得这篇文章对您有帮助的话欢迎您一键三连,小编尽全力做到更好欢迎您分享给更多人哦大家好我们今天来学习Java面向对象的三大特性之一的继承,我们大家庭就要来啦~一:多态的概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当......
  • 三,Java面向对象的特点其三:多态
    Java面向对象:深入理解多态性在Java编程中,多态性(Polymorphism)是指同一个事物在不同时刻下的不同状态。多态性是面向对象编程中的一个重要概念,它允许我们根据需要在运行时动态地改变对象的行为。多态概述多态允许一个类有多个形态,即在运行时可以改变对象的行为。多态性是继承和方......