面向对象编程三大特征之一 继承
文章目录
- 继承
- 概述
- 语句定义格式
- 继承的特点
- 注意事项
- 继承与成员变量之间的关系
- this关键字与super关键字的使用区别
- 继承与构造方法的关系
- 继承与成员方法的关系
- 重写与重载的区别
- 方法重写的注意事项
- final关键字
- final的特点
继承
概述
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
语句定义格式
class 子类名 extends 父类名{…}
要实现一个继承关系至少需要2个类
class Fu{}
class Zi extends Fu{}
这里的Zi我们称之为子类,派生类,
这里的Fu我们称之为父类,超类,基类
因此继承就是把多个类相同的内容提取到另外一个类中,然后使用关键字extends来实现继承。
继承的好处:
1、提高了代码的复用性 看一看父类
2、提高了代码的维护性 只需要修改父类的内容
3、让类与类之间产生了继承关系,为了后面多态做铺垫(要有继承才能有多态)
继承的坏处:
类的耦合性增强了
开发的原则:低耦合,高内聚
耦合:类与类之间的关系
内聚:类自己本身可以完成的事情
继承的特点
1、Java中的类class只支持单个继承,不允许多个继承
2、Java中的类支持多层继承(形成了一个继承体系)
例如:
class Son extends Father4,Mother4{}
错误,不允许这么做
代码示例:
class GrandFather{public void show(){System.out.println("我是爷爷");}
}class Father4 extends GrandFather{public void show1(){System.out.println("我是老子");}
}class Son4 extends Father4{public void show2(){System.out.println("我是儿子");}
}public class ExtendsDemo3 {public static void main(String[] args) {Son4 son4 = new Son4();son4.show2(); //可以使用自己的方法son4.show1(); //也可以使用父亲的方法son4.show(); //也可以使用爷爷的方法}
}
注意事项
1、要想初始化子类,必须先初始化父类
举例:现有父亲,才能有儿子
2、子类只能继承父类的非私有的成员(成员变量和成员方法)
3、子类不能继承父类的构造方法,但是可以通过super关键字去访问父类的构造方法(因为要想初始化子类,必须先初始化父类,是通过构造方法进行初始化的)
4、不要为了部分的功能而去使用继承,当两个类满足语法什么是什么的时候,就可以使用继承了
比如:学生是人,老师是人;可乐是液体,水是液体…
继承与成员变量之间的关系
1、当子类中的成员变量与父类中的成员变量名字一样的时候
查找:(就近原则)
1)先在方法的局部范围内进行查找,如果找到就返回
2)如果在方法局部范围找不到,去本类中成员位置上查找,如果找到就返回
3)如果在中成员位置上找不到,去父类中成员位置上查找,如果找到就返回
4)如果在父类中成员位置上找不到,报错。
2、当子类中的成员变量与父类中的成员变量名字不一样的时候,使用什么变量名,就访问谁
this关键字与super关键字的使用区别
this代表的是调用该类的当前对象
super代表的是父类存储空间的标识(父类的引用,可以操作父类的成员)
1、访问成员变量
this.成员变量 访问的是本类中的成员变量
super.成员变量 访问的是父类中的成员变量
2、访问构造方法
this(…)
super(…)
3、访问成员方法
this.成员方法()
super.成员方法()
System.out.println(this.num); // 访问的是本类中的成员变量
System.out.println(super.num);// 访问的是父类中的成员变量
代码示例:
class Father7{int num = 10;public void show2(){System.out.println("这是父类中的show2方法");}
}
class Son7 extends Father7{int num = 20;public void show(){int num = 30;System.out.println(num);System.out.println(this.num); // 访问的是本类中的成员变量//如何访问到父类中的同名成员变量呢?System.out.println(super.num);// 访问的是父类中的成员变量show2();//public可以直接引用super.show2();//但是如果是private,都不可以用show3();this.show3();}public void show3(){System.out.println("这是Son7类中的show3方法");}
}public class ExtendsDemo6 {public static void main(String[] args) {Son7 son7 = new Son7();son7.show();}
}
继承与构造方法的关系
1、要想初始化子类,必选先初始化父类
2、为什么?
因为子类会继承父类的数据,甚至可能会使用父类的数据
注意:每个子类的构造方法的第一句话默认是super().
当父类中没有无参构造方法的时候,怎么办?
1、使用super关键字带参数的形式访问父类的带参数构造方法
2、子类通过this关键字调用本类的其他构造方法,
注意,本类其他构造方法也必须可以访问父类拥有的构造方法,使用this关键字间接的调用父类的构造方法,无论在哪里调用父类的构造方法,只要最后保证在子类构造方法内容执行之前完成了父类的初始化就可以了
3、super(…)或者this(…)必须出现在第一条语句上
2、否则就会出现父类的数据进行了多次初始化
(重点)每个类只能初始化一次
继承与成员方法的关系
1、当子类的成员方法名与父类成员方法名不一样的时候,该调用谁就调用谁的
2、当子类的成员方法名与父类成员方法名一样的时候,怎么办呢?(就近原则)
1)先在本类中查找,如果有就调用,如果没有去父类中查找,
2)如果父类中有方法,就调用父类的
3)如果连父类中都没有要调用的方法名,报错,提示找不到方法。
子类的方法名能不能和父类方法的声明一样?
如果子类的方法声明与父类的方法声明一样,这样的现象叫做方法的重写。
重写现象是发生在继承的关系中。
重写与重载的区别
重写是发生在继承的关系的关系中,重载是发生在本类中。
重载overload是方法名一致,参数列表不一致就是重载。
重写override是方法名,参数列表,返回值都一样,实现不一样,叫方法的重写。
生活中重写的案例有:水杯–保温杯
方法重写的注意事项
1、父类中私有的方法不能被重写
2、子类重写父类的方法时候,访问权限不能更低
要么子类重写的方法访问权限比父类的访问权限要高或者一样
建议:以后子类重写父类的方法的时候,权限修饰符写一样就不会发生这样的问题。
3、父类中静态的方法不能被重写,也就是说不能被Override修饰,因为静态的是属于类本身的东西。
final关键字
有些时候,不想让子类覆盖重写父类中的方法或者功能,只能让子类去使用,java提供了一个关键字:
final:最终的意思。可以修饰类,成员变量,成员方法。
final的特点
final修饰局部变量
1、在方法内部,修饰基本数据类型的变量,变量值只能赋值一次,不能发生改变
2、final修饰引用数据类型的变量呢?
引用的地址值不可以发生改变,但是该对象的堆内存中的值是可以发生改变的。
代码示例:
class Student {int age = 10;
}
public class FinalDemo2 {public static void main(String[] args) {int x=100;x=300;System.out.println(x);final int y = 200;
// y = 400; //无法为最终变量y分配值System.out.println(y);Student student = new Student();System.out.println(student.age);final Student s2 = new Student();System.out.println(s2.age);s2.age = 1000;//可以改值,但是地址值不可改变System.out.println(s2.age);System.out.println("==========================");
// s2 = new Student(); //无法为最终变量s2分配值}
}
面向对象编程三大特征之一 继承相关推荐
- python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)
面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...
- 允许使用抽象类类型 isearchboxinfo 的对象_Java面向对象编程三大特征 - 多态
Java面向对象编程三大特征 - 多态 本文关键字:Java.面向对象.三大特征.多态 多态是面向对象编程的三大特征之一,是面向对象思想的终极体现之一.在理解多态之前需要先掌握继承.重写.父类引用指向 ...
- JS面向对象编程三大特征
JS面向对象编程三大特征 JS面向对象的三大特征为封装.继承.多态.下面分别进行介绍: 封装 封装是指创建一个对象集中保存一个事物的属性与功能 继承 继承是指父亲的成员,孩子无需重复创建就可直接使用. ...
- java的知识点11——面向对象的三大特征之一继承、instanceof 运算符、方法的重写override、Object类基本特性、toString方法
面向对象的三大特征:继承.封装.多态 继承的实现 继承让我们更加容易实现类的扩展.子类是父类的扩展 使用extends实现继承 package cn.sxt;public class Test {pu ...
- Python - 面向对象编程 - 三大特性之继承
继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的 class 类就叫子类(Subclass) 被继承的类一般称为父 ...
- Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态
Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...
- Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]
✅ Blogger Learns Python is for learning the "Deep Learning". 文章目录 一.面向对象编程的简介 二.类与对象 -- 基础 ...
- Python攻城师的成长————面向对象的三大特征(继承、多态)
学习目标: 了解继承与多态的概念,重点是要学会运用继承去处理问题 学习内容: 继承 在面对对象程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,而被继 ...
- Python面向对象编程三大特性之继承
继承 继承 继承的语法 重写 扩展 引用 super().父类方法名 参数传递 code:_6Inheritance.py # ************************************ ...
最新文章
- Didn't find class net.oschina.app.AppContext on
- 对象***已断开连接或不在该服务器上 的解决方案之一
- Deepmind顺练了人工智能14天成为星海2最强玩家
- PHP使用单例模式进行连接DB:public的方法进行调用连接函数即可
- 创建存储,修改存储_安全地创建和存储密码
- 如何使用Android Studio把自己的Android library分享到jCenter和Maven Central
- 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)...
- 浅谈vue —— 生命周期
- 江西财经大学计算机类含物联网专业,江西财经大学计算机类(02含物联网工程)专业2016年在湖北理科高考录取最低分数线...
- Maven的下载与配置(包含阿里云镜像配置)
- nginx 源码安装
- 网课题库接口教程(免费)
- wps参考文献乱码。英文的行间距怎么调?
- 乙炔黑-离子液体复合修饰玻碳电极(AB-ILs/GCE)|离子液体修饰改性的多壁碳纳米管(MWNTs)
- 教育部大学计算机课程改革项目规划教材答案,大学计算机实验指导及习题训练(教育部大学计算机课程改革项目规划教材)...
- GIF动画制作软件哪个好
- ai智能电话销售机器人——AI与外呼碰撞出爱的火花
- 桩筏有限元中的弹性板计算_[转载]建研院关于桩筏计算几个问题的解答
- (HTML+css)学习小征程!!!
- 东莞理工学院计算机学院转专业,东莞理工学院学生在校期间是否允许转专业
热门文章
- Web安全渗透全套教程 [1/40]
- Winform绘画工具类Graphics
- Java基础入门(十八)之NIO
- Go Http Get 和 Post 工具函数
- 我国中职计算机基础课程停留在什么阶段,微课在中职计算机基础课程中的应用...
- 【Python】判断文件类型(格式)
- FlipView 索引为0 WP8.1
- 情感分析ASTE三元组提取的BIO标注
- Learning Span-Level Interactions for Aspect Sentiment Triplet Extraction 论文阅读 ACL2021
- 计算机二级VB语言程序设计-第九章