继承 + 多态 + final + 权限修饰符

news2025/1/11 20:43:12

目录

继承

多态

final

权限修饰符


继承

  • 继承定义:
    • 可以让类跟类之间产生子父的关系
  • 继承的好处
    • 可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码几余,提高代码的复用性
  • 子类继承内容
    非私有private
    构造方法××
    成员变量√(不能用)
    成员方法能添加到虚方法表  √不能添加到虚方法表   ×
    • 构造方法

多态

  • 根据传递对象的不同,调用不同的show方法
  • 同类型对象,表现出不同的形态
  • 多态的前提  
    • 有继承关系
    • 有父类引用指向子类对象
    • 有方法重写
  • 案例
    • 人类
      package com.duotai;
      
      public class Person {
          private String name;
          private String age;
      
          public Person() { }
          public Person(String name, String age) {
              this.name = name;
              this.age = age;
          }
      
          public String getName() { return name; }
          public void setName(String name) { this.name = name; }
          public String getAge() { return age; }
          public void setAge(String age) { this.age = age; }
      
          public void show(){
              System.out.println("我执行了吗");
          }
      }
      
    • 学生类
      package com.duotai;
      
      public class Student extends Person {
          public void show(){
              System.out.println("学生:" + getName() + getAge());
          }
      }
      
    • 老师类
      package com.duotai;
      
      public class Teacher extends Person{
          public void show(){
              System.out.println("老师:" + getName() + getAge());
          }
      }
      
    • 测试类
      package com.duotai;
      
      public class Test {
          public static void main(String[] args) {
              Student student = new Student();
              student.setName("小敏");
              student.setAge("6");
      
              Teacher teacher = new Teacher();
              teacher.setName("王老师");
              teacher.setAge("29");
      
              register(student);
              register(teacher);
          }
          public static void register(Person p){
              p.show();
          }
      }
      
    • 结果
  • 多态调用成员变量的特点

    • 变量调用:编译看左边、运行看右边
    • 方法调用:编译看左边、运行观看右边
  • 案例
    根据需求完成代码:
    	1.定义狗类
    		属性:
    			年龄,颜色
    		行为:
    			eat(String something)(something表示吃的东西)
    			看家lookHome方法(无参数)
    
    	2.定义猫类
    		属性:
    			年龄,颜色
    		行为:
    			eat(String something)方法(something表示吃的东西)
    			逮老鼠catchMouse方法(无参数)
    
    	3.定义Person类//饲养员
    		属性:
    			姓名,年龄
    		行为:
    			keepPet(Dog dog,String something)方法
    				功能:喂养宠物狗,something表示喂养的东西
    		行为:
    			keepPet(Cat cat,String something)方法
    				功能:喂养宠物猫,something表示喂养的东西
    		生成空参有参构造,set和get方法  
    	4.定义测试类(完成以下打印效果):
    		keepPet(Dog dog,String somethind)方法打印内容如下:
    			年龄为30岁的老王养了一只黑颜色的2岁的狗
    			2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃
    		keepPet(Cat cat,String somethind)方法打印内容如下:
    			年龄为25岁的老李养了一只灰颜色的3岁的猫
    			3岁的灰颜色的猫眯着眼睛侧着头吃鱼
    	5.思考:		
    		1.Dog和Cat都是Animal的子类,以上案例中针对不同的动物,定义了不同的keepPet方法,过于繁琐,能否简化,并体会简化后的好处?
    		2.Dog和Cat虽然都是Animal的子类,但是都有其特有方法,能否想办法在keepPet中调用特有方法?
    • Animal类
      package com.duotai.test;
      
      public class animal {
          private int age;
          private String color;
      
          public animal() { }
          public animal(int age, String color) {
              this.age = age;
              this.color = color;
          }
      
          public int getAge() { return age; }
          public void setAge(int age) { this.age = age; }
          public String getColor() { return color; }
          public void setColor(String color) { this.color = color; }
      
          public void eat(String something){
              System.out.println("动物在吃" + something);
          }
      }
      
    • Cat类
      package com.duotai.test;
      
      public class Cat extends animal{
      
          public Cat() { }
          public Cat(int age, String color) {
              super(age, color);
          }
      
          @Override
          public void eat(String something){
              System.out.println(getAge() + "岁的" + getColor() + "颜色的猫吃" + something);
          }
      
          public void cathMouse(){
              System.out.println("猫抓老鼠");
          }
      }
      
    • Dog类
      package com.duotai.test;
      
      public class Dog extends animal {
      
          public Dog() { }
      
          public Dog(int age, String color) {
              super(age, color);
          }
      
          @Override
          public void eat(String something){
              System.out.println(getAge() + "岁的" + getColor() + "颜色的狗吃" + something);
          }
      
          public void LookHome(){
              System.out.println("狗在看家");
          }
      }
      
    • Person类
      package com.duotai.test;
      
      public class Person {
          private String name;
          private int age;
      
          public Person(){}
          public Person(String name, int age) {
              this.name = name;
              this.age = age;
          }
      
          public String getName() { return name; }
          public void setName(String name) { this.name = name; }
          public int getAge() { return age; }
          public void setAge(int age) { this.age = age; }
      
          public void keepPet(Dog dog,String something){
              System.out.println("年龄为" + getAge() + "的" + getName() + "养了一只" + dog.getColor() + "色的狗");
              dog.eat(something);
          }
      
          public void keepPet(Cat cat,String something){
              System.out.println("年龄为" + getAge() + "的" + getName() + "养了一只" + cat.getColor() + "色的猫");
              cat.eat(something);
          }
      
      
      
      }
      
    • Test类
      package com.duotai.test;
      
      public class Test {
          public static void main(String[] args) {
              Person person = new Person("老王",25);
              Dog dog = new Dog(2, "黑");
              person.keepPet(dog,"骨头");
      
      
              Person person1 = new Person("小李", 15);
              Cat cat = new Cat(1, "黄");
              person1.keepPet(cat,"鱼");
          }
      }
      

       

final

  • final        
    • 方法:表明方法是最终方法,不能被重写
    • 类:表明类是最终类,不能被继承
    • 变量:叫做常量,只能被赋值一次
      • final修饰的变量是基本类型:变量存储的数据值不能发生改变
      • final修饰的变量是引用类型:变量存储的地址值不能发生改变,但对象内部可以变
  • 案例:更加安全

权限修饰符

  • 修饰符种类
    修饰符同一个类中同一个包中
    其他类
    不同包下的
    子类
    不同包下的
    无关类
    private
    空值不写
    protected
    public

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

#机器学习--深度学习中的正则化

#机器学习--深度学习中的正则化 引言1、参数范数惩罚2、 L 2 L^{2} L2 正则化3、 L 1 L^{1} L1 正则化4、显式约束和重投影5、参数绑定和参数共享6、Bagging7、Dropout 引言 本系列博客旨在为机器学习(深度学习)提供数学理论基础。因此内容更为精简,适合二次学习的…

uniapp实现条码扫描 可开闪光灯,原生H5调用,不需要任何sdk。

主要思路 使用QuaggaJs这个库。调用摄像头使用的 navigator.mediaDevices.getUserMedia 这个H5的api。通过 video 和 canvas 把摄像头获取到的数据展现到页面上,同时调用监听Quagga解析。 获取设备摄像头权限,用于后续开启摄像头。创建video元素显示摄像头画面,和ca…

AcWing算法提高课-1.3.10混合背包问题

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 有 N N N 种物品和一个容量是 V V V 的背包。 物品一共有三类&#xff1a; 第一类物品只能用1次&#xff08;01背包&#xff0…

opencv相机标定

当你把摄像机放在一个特定的位置&#xff0c;在它的后面放一个目标图像&#xff0c;或者是把摄像机放到某个物体上&#xff0c;摄像机周围的物体是什么形状&#xff0c;你需要知道这些信息。 当你在计算机上处理图像时&#xff0c;会使用以下三个参数&#xff1a; 1.像素坐标&a…

软件测试5年了,薪资25K,我还怕00后卷吗?

前言 沅哥在这个行业爬摸滚打5年了&#xff0c;从最开始点点点的功能测试到现在到现在成为高级测试&#xff0c;工资也翻了几倍&#xff0c;到了25k。他和我说&#xff0c;最开始他是想躺平的&#xff0c;后来也是被迫卷的&#xff0c;但好在这个结果他很满意。 之所以改变的…

一文3000字从0到1使用Selenium进行自动化测试

对于很多刚入门的测试新手来说&#xff0c;大家都将自动化测试作为自己职业发展的一个主要阶段。可是&#xff0c;在成为一名合格的自动化测试工程师之前&#xff0c;我们不仅要掌握相应的理论知识&#xff0c;还要进行大量的实践&#xff0c;积累足够的经验&#xff0c;以便快…

【重新定义matlab强大系列七】利用matlab函数ischange查找数据变化点

&#x1f517; 运行环境&#xff1a;matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

为了入职字节测试岗准备半年,上岸拿个30K应该不算高吧?

历时近半年的面试终于告一段落&#xff0c;终于有时间整理下自己这次的换工作心得&#xff0c;分享给大家。 面试经历 我的基本情况是这样&#xff1a;中下等 985 学校本科毕业&#xff0c;非计算机专业&#xff0c;在北京工作五年&#xff0c;之前一直在中小私企、国企工作。…

程序语言易错题

程序语言易错题 包含8个成员的开发小组的沟通路径最多有&#xff08;&#xff09;条。 A、28 B、32 C、56 D、64 解析 软件开发小组的沟通路径受到小组组织形式和规模的影响。若任意小组成员之间均可能有沟通路径&#xff0c;则可用完全连通图来对开发小组的沟通路径建模&#…

Anaconda-labelimg的使用

文章目录 一、创建Anaco的虚拟环境并激活二、下载labelimg以及使用1.下载2.使用 在这里我是创建了一个虚拟环境&#xff0c;虚拟环境名字为labelimg 之后将labelimg下载到该虚拟环境中 一、创建Anaco的虚拟环境并激活 conda create -n labelimg conda activate labelimg二、下…

Smoothieware_best-for-pnp 工具链的升级尝试

文章目录 Smoothieware_best-for-pnp 工具链的升级尝试概述实验工具链安装的思路更换工具链的工作备注END Smoothieware_best-for-pnp 工具链的升级尝试 概述 正在迁移Smoothieware_best-for-pnp到MCUXPresso的失败实验中徘徊. 现在已知2者的工具链版本是不一样的. 通过2进制…

MAC免密登录服务器

文章目录 1.Mac本机打开终端生成公私钥2.找打刚才生成的公钥3.上传公钥到远程 Linux 服务器4.远程登录到Linux系统服务器里面执行如下操作5.设置后在退出终端,输入如下命令即可免密登录6. 禁止 Linux 使用账号密码登录 1.Mac本机打开终端生成公私钥 输入ssh-keygen&#xff0c…

python获取某电商平台口红数据并制作词云

目录标题 前言开发环境:模块使用数据来源分析代码展示获取数据制作词云 尾语 &#x1f49d; 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 开发环境: Python 3.8 Pycharm 模块使用 requests jieba 结巴分词 wordcloud 词云 第三方模块安装&#xff1a; win R 输…

Apache Kafka - 重识Kafka

文章目录 概述一、Kafka的概念二、Kafka的特点三、Kafka的使用场景导图 概述 Kafka是一个高性能、分布式的消息队列系统&#xff0c;它的出现为大规模的数据处理提供了一种可靠、快速的解决方案。我们先初步了解Kafka的概念、特点和使用场景。 一、Kafka的概念 Kafka是由Apac…

《设计模式》状态模式

《设计模式》状态模式 定义&#xff1a; 状态模式也称为状态机模式&#xff0c;允许对象在内部状态发生改变时改变它的行为&#xff0c;对象看起来好像修改了它的类。属于行为型模式。 状态模式的角色组成&#xff1a; State(抽象状态类)&#xff1a;定义一个接口用来封装与…

文本三剑客正则表达式3

文章目录 文本三剑客&正则表达式31 awk工作原理2 awk的基本格式及其内置变量2.1 基本格式2.2 内置变量2.3 示例2.3.1 直接打印所有内容2.3.2 取每一行的第一列2.3.3 打印行号&#xff0c;及所有内容2.3.4 打印第三行2.3.5 打印2-4行2.3.6 打印第2行和第4行2.3.7 用正则表达…

面试面麻了,别再难为测试人了····

去面试吧 面不被录用的试 面hr为了完成任务的试 面一轮二轮没有下文试 面需要通勤2小时的试 面随时加班的试 ...... 今年的“金三银四”被网友们称为“铜三铁四”&#xff0c;招聘软件上的岗位都能背下来了&#xff0c;简历却依然石沉大海。 好不容易等来个回复&#xff0c;还不…

手写西瓜书bp神经网络 mnist10 c#版本

本文根据西瓜书第五章中给出的公式编写&#xff0c;书中给出了全连接神经网络的实现逻辑&#xff0c;本文在此基础上编写了Mnist10手写10个数字的案例&#xff0c;网上也有一些其他手写的例子参考。demo使用unity进行编写&#xff0c;方便且易于查错。 该案例仅作为学习&#x…

Linux网络——shell编程之免交互

Linux网络——shell编程之shell编程之免交互 一、概述1.常用的交互程序&#xff1a;2.语法格式&#xff1a; 二、Here Document常规用法1.read 命令的读取2.wc -l 的内容行数统计3.passwd用户密码的修改4.cat 查看内容并输出到文件中5.cat 查看交互内容并输出到新的文件中6.交互…

【计算机系统基础4】程序的机器级表示

4.程序的机器级表示 4.1&#xff08;&#x1f3eb; CMU补充 &#xff09;x86-64 Linux 寄存器使用 %rax 返回值调用函数保存可以通过程序修改 rdi&#xff0c;…&#xff0c;%r9 传入参数&#xff08;arguments&#xff09;调用函数保存可通过程序进行修改 %r10&#xff0c;%…