重学java 19.面向对象 继承 上

走不出的那段阴霾,很多时候只不过是,我们把它当成了唯一

                                                                                —— 24.4.22

面向对象整体知识导向:

知识梳理:

1.知道继承的好处

2.会使用继承

3.继承之后成员变量和成员方法的访问特点

4.方法的重写,知道方法重写的使用场景

5.使用this关键字调用当前对象中的成员

6.使用super关键字调用父类中的成员

7.定义抽象方法以及抽象类

8.重写抽象方法

继承

知识梳理:

① 什么是继承

② 继承的基本使用

③ 继承中成员访问特点

④ 方法的重写

一、什么是继承

1.父类是怎么形成的?

        我们定义了多个类,发现这些类中有很多重复性的代码,我们就定义了一个父类,将相同的代码抽取出来放到父类中,就可以直接使用父类中的内容了

2.怎么去继承?

        extends

        子类 extends 父类

3.注意:

        ①子类可以继承父类中私有和非私有成员,但是不能使用父类中的私有成员

        ②构造方法不能继承

4.继承怎么学习?

        ①不要从是否“拥有”来学习,要从是否能“使用”来学习

5.继承在面向对象三大特性中,更像一个代码设计思想

二、继承的基本使用

1.定义一个父类,在其中定义重复性的代码

2.定义一个子类继承父类 -> extands

        子类 extands 父类

3.创建子类对象,直接使用父类中的非私有成员

案例:

父类:

public class Employee {String name;int age;public void work(){System.out.println("工作");}private void eat(){System.out.println("员工要吃饭");}
}

子类1

public class Teacher extends Employee{}

子类2

public class Manager extends Employee{
}

测试类

public class Demo106Inherit {public static void main(String[] args) {Teacher teacher = new Teacher();teacher.name = "小王";teacher.age = 18;System.out.println(teacher.name+" "+teacher.age);teacher.work();//teacher.eat();    子类继承父类后不能使用私有成员Manager manager = new Manager();manager.name = "小明";manager.age = 25;System.out.println(manager.age+" "+ manager.name);manager.work();}
}

三、继承中成员变量和成员方法的访问特点

1.成员变量

① 子类和父类中的成员变量不重名

父类:

public class Fu {int numFu = 100;
}

子类:

public class Son extends Fu{int numSon = 10;
}

测试类:

public class Demo107Test {public static void main(String[] args) {//创建父类对象Fu fu = new Fu();System.out.println(fu.numFu);//父类中的numFu// System.out.println(fu.numZi);//不能直接调用子类中的特有成员Son son = new Son();System.out.println(son.numFu);System.out.println(son.numSon);}
}

总结:在继承的体系下,看等号左边是谁就调用谁中的成员,如果等号左边是父类类型,只能调用父类中的成员变量,如果等号左边是子类类型,既能调用子类的,还能调用父类中继承而来的非私有成员

② 子类和父类中的成员变量重名

父类:

public class Fu {int numFu = 100;int num = 10000;
}

子类:

public class Son extends Fu{int numSon = 10;int num = 100;
}

测试类:

public class Demo107Test {public static void main(String[] args) {//创建父类对象Fu fu = new Fu();System.out.println("父类中fu.numFu:"+fu.numFu);//父类中的numFu// System.out.println(fu.numZi);//不能直接调用子类中的特有成员//创建子类对象Son son = new Son();System.out.println("子类中son.numFu:"+son.numFu);System.out.println("子类中son.numSom:"+son.numSon);System.out.println("fu.num:"+fu.num);//继承了父类,可以使用父类中非私有成员System.out.println("son.num:"+son.num);//子类的}
}

总结:

        继承前提下,成员变量访问特点口诀(同样适用于多态):

                看等号左边是谁,先调用谁中的成员,子类中没有再寻找父类

2.成员方法

① 子类和父类中的成员方法不重名

父类:

public class Fu {public void methodFu(){System.out.println("我是父类中的methodFu");}
}

子类:

public class Son extends Fu{public void methodSon(){System.out.println("我是子类当中的methodSon");}
}

测试类:

public class Demo108Test {public static void main(String[] args) {Fu fu = new Fu();fu.methodFu();// fu.methodSon();不能直接调用子类特有的方法System.out.println("————————————————————");Son son = new Son();son.methodSon();son.methodFu();// 继承父类之后,能调用父类非私有成员}
}

② 子类和父类中的成员方法重名

父类:

public class Fu {public void methodFu(){System.out.println("我是父类中的methodFu");}public void method(){System.out.println("我是父类中的method方法");}
}

子类:

public class Son extends Fu{public void methodSon(){System.out.println("我是子类当中的methodSon");}public void method(){System.out.println("我是子类中的method方法");}
}

测试类:

public class Demo108Test {public static void main(String[] args) {Fu fu = new Fu();fu.methodFu();// fu.methodSon();不能直接调用子类特有的方法fu.method();System.out.println("————————————————————");Son son = new Son();son.methodSon();son.methodFu();// 继承父类之后,能调用父类非私有成员son.method();}
}

多态调用:

public class Demo108Test {public static void main(String[] args) {Fu fu = new Fu();fu.methodFu();// fu.methodSon();不能直接调用子类特有的方法fu.method();System.out.println("————————————————————");Son son = new Son();son.methodSon();son.methodFu();// 继承父类之后,能调用父类非私有成员son.method();System.out.println("————————————————————");Fu fu1 = new Son();fu1.method();// 调用的是子类中的method方法}
}

总结:

        成员方法的访问特点:成员方法看new的是谁,就调用谁中的方法,子类中没有方法再找父类(同样适用于多态

        继承中,成员变量访问特点:看等号左边是谁,先调用谁中的方法

                       成员方法访问特点:看new的是谁,先调用谁中的方法

四、方法的重写

1.概述:

        子类中有一个和父类方法名以及参数列表都相同的方法

2.前提

        继承

3.访问:

        看new的是谁,先调用谁中的,如果new的是子类,调用子类重写的方法,子类没有找父类

4.检测是否为重写方法

        在方法上写上:@Override

父类:

public class Fu {public void methodFu(){System.out.println("我是父类中的methodFu方法");}public void method(){System.out.println("我是父类中的method方法");}
}

子类:

public class Son extends Fu{public void methodSon(){System.out.println("我是子类中的methodSon方法");}@Overridepublic void method(){System.out.println("我是子类中的method方法");}
}

测试类:

public class Demo109Test {public static void main(String[] args) {Fu fu = new Fu();fu.methodFu();// 自己的methodFu方法fu.method();//new的是父类对象,那么调用的就是父类中的method方法System.out.println("————————————————————");Son son = new Son();son.methodSon();son.methodFu();son.method();// 子类中的method方法}
}

5.方法重写后的注意事项

        ①子类重写父类的方法后,权限必须要保证大于等于父类权限(权限指的是访问权限)

                public -> protected -> 默认 ->private

                

        ②子类方法重写父类方法,方法名参数列表要一样

        ③私有方法不能被重写,构造方法不能被重写,静态方法也不能被重写

        ④子类重写父类方法之后,返回值类型应该是父类方法返回值类型的子类类型

6.方法重写的使用场景

使用场景:功能升级改造,子类需要对父类中以及实现好的功能进行重新改造

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/641936.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scala 04 —— Scala Puzzle 拓展

Scala 04 —— Scala Puzzle 拓展 文章目录 Scala 04 —— Scala Puzzle 拓展一、占位符二、模式匹配的变量和常量模式三、继承 成员声明的位置结果初始化顺序分析BMember 类BConstructor 类 四、缺省初始值与重载五、Scala的集合操作和集合类型保持一致性第一部分代码解释第二…

【软件测试】认识测试|测试岗位|软件测试和开发的区别|优秀的测试人员需要具备的素质

推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站】 一、什么是测试 测试在⽣活中处处可⻅ 1.生活中的测试场景 案例⼀:对某款购物软件进⾏测试 *启动测试:…

Linux - tar (tape archive)

tar 的全称是 Tape Archive。它最初是在 Unix 系统中用于将数据写入磁带的工具,但现在它通常用于创建、维护、修改和提取文件的归档文件。尽管 tar 可以用于压缩和解压缩文件,但它本身并不进行压缩,而是通常与 gzip 或 bzip2 等压缩工具一起使…

[2024更新]如何从Android恢复已删除的相机照片?

相信大家都经历过Android手机误删相机图片的经历。您是否正在寻找一种可行的方法来挽救这些丢失的照片?如果这是你迫切想解决的问题,那么这篇文章绝对可以帮助你。然而,与其考虑如何从Android恢复已删除的相机照片,我们更愿意建议…

【Qt】:界面优化(一:基本语法)

界面优化 一.基本语法1.设置指定控件样式2.设置全局控件样式3.从文件加载样式表4.使⽤Qt Designer编辑样式(最常用) 二.选择器1.概述2.子控件选择器3.伪类型选择器 三.盒模型 在网页前端开发领域中,CSS是一个至关重要的部分.描述了一个网页的"样式&…

C++之类和对象--赋值运算符重载和const成员函数

目录 1.赋值运算符重载 1.1运算符重载 1.2赋值运算符重载 1.3其它特性 2.const成员函数 3.取地址及const取地址操作符重载 hello,欢迎大家来到小恶魔频道,今天讲解的是C里面的赋值运算符重载以及const成员函数 1.赋值运算符重载 1.1运算符重载 运…

基于Springboot的新生宿舍管理系统

基于SpringbootVue的新生宿舍管理系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 公告信息管理 院系管理 班级管理 学生管理 宿舍信息管理 宿舍安排管理…

Unity系统学习笔记

文章目录 1.基础组件的认识1.0.组件继承关系图1.1.项目工程文件结构,各个文件夹都是做什么的?1.2.物体变化组件1.2.3.三维向量表示方向1.2.4.移动物体位置附录:使用变换组件实现物体WASD移动 1.3.游戏物体和组件的显示和禁用1.3.1.界面上的操…

python 对图片进行操作

Pillow是一个强大的图像处理库,它提供了许多用于打开、操作和保存图像的功能。 Image模块: Image模块提供了用于打开、创建、编辑和保存图像的基本功能。可以使用Image.open()函数来打开图像文件,或者使用Image.new()函数来创建新的图像,还可…

DSP系统的设计过程与选型

DSP的设计步骤分几个阶段,应用系统的设计过程如图所示。 技术指标的确定 器件的选型原则 其他因素的考虑

css再学习

id选择器的id仅能使用一次; 可去除也可添加加粗效果; font 行高为数字n时(不添加单位)是浏览器默认font-size的n倍; 行高实现文字垂直居中(仅适应于单行文字):将line-height设置…

思科警告:全球出现大规模针对 VPN 服务的暴力破解攻击事件

近日,全球范围内出现了大量针对思科、CheckPoint、Fortinet、SonicWall 和 Ubiquiti 设备的 VPN 和 SSH 服务的大规模凭据暴力破解活动。 原文地址:https://mp.weixin.qq.com/s/UoMgC8Bp6OMJiXgeU3XbyA 暴力攻击是指使用许多用户名和密码尝试登录帐户或…