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

embedded/2024/11/9 16:45:41/

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

                                                                                —— 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.创建子类对象,直接使用父类中的非私有成员

案例:

父类:

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

子类1

java">public class Teacher extends Employee{}

子类2

java">public class Manager extends Employee{
}

测试类

java">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.成员变量

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

父类:

java">public class Fu {int numFu = 100;
}

子类:

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

测试类:

java">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);}
}

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

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

父类:

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

子类:

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

测试类:

java">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.成员方法

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

父类:

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

子类:

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

测试类:

java">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();// 继承父类之后,能调用父类非私有成员}
}

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

父类:

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

子类:

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

测试类:

java">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();}
}

多态调用:

java">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

父类:

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

子类:

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

测试类:

java">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.ppmy.cn/embedded/10824.html

相关文章

海信发布《黑神话:悟空》定制电视E8N新品,重塑大屏游戏体验

4月17日,在“AI美好生活”2024海信电视E8系列新品发布会上,海信电视官宣成为《黑神话:悟空》全球官方合作伙伴。同时,海信电视还为广大游戏玩家带来了《黑神话:悟空》的显示CP,推出了官方定制电视——旗舰新…

论文略读:SWE-bench: Can Language Models Resolve Real-world Github Issues?

iclr 2024 oral reviewer评分 5668 现有的语言模型(LMs)的基准测试已经饱和,无法捕捉到最先进的语言模型能做什么和不能做什么的前沿。 ——>要具有挑战性的基准测试论文引入了SWE-bench 在现实软件工程环境中评估语言模型的基准测试 ​​…

开源大模型应该怎么选?

文章目录 前言为什么选择开源模型而不是商业模型?开源模型对比Llama 2Mixtral 8x7BZephyr 7BSOLAR 10.7BCode Llama 专用 Vs. 通用生产环境部署LLMs 的注意事项 前言 在过去的一年里,人工智能领域不断涌现出各种大语言模型(LLMs),每个模型都在不断突破生…

超实用的Web兼容性测试经验总结,建议Mark

在日常工作中,我们经常碰到网页不兼容的问题。我们之所以要做兼容性测试,目的在于保证待测试项目在不同的操作系统平台上正常运行。 主要包括待测试项目能在同一操作系统平台的不同版本上正常运行;待测试项目能与相关的其他软件或系统的“和…

【HarmonyOS】Stage 模型 - 基本概念

一、项目结构 如图1所示: 图1 从项目结构来看,这个应用的内部包含了一个子模块叫 entry,模块是应用的基本功能单元,它里面包含源代码、资源、配置文件等。 像这样的模块在应用内部可以创建很多。但模块整体来讲就分成两大类&am…

关联规则挖掘(二)

目录 三、FP-增长算法(一)算法的背景(二)构造FP-树(三)生成频繁项集 四、关联规则的评价(一)支持度和置信度的不足(二)相关性分析 三、FP-增长算法 &#xf…

3D抓取算法的介绍

3D抓取算法是一个用于三维点云数据上物体抓取的基线算法。该算法基于深度学习,利用点云数据来预测最佳的抓取点,以便机器人或其他自动化系统能够执行精确的抓取操作。 以下是关于3D抓取算法的详细介绍: 1. 数据输入 3D抓取算法通常接受三维…

OpenHarmony实战开发-减小应用包大小。

简介 减小应用包大小是提升应用下载、安装体验的重要方式之一。通过压缩、精简或者复用应用中的代码或资源,可以有效降低应用的大小,提升应用下载和安装速度,减少系统空间占用。 开发者可以参考下面三种方法减小应用包大小: 配…