Java基础-面向对象进阶-多态, 包, final, 权限修饰符,代码块

Java基础-面向对象进阶-多态, 包, final, 权限修饰符,代码块

  • 多态
    • 多态的概述
    • 多态中调用成员的特点
    • 多态的优势和弊端
    • 多态练习
  • final
  • 权限修饰符
  • 代码块
  • 来源
  • Gitee地址

多态

多态的概述

  • 多态: 对象的多种形态
  • 多态的前提
    • 有继承/实现关系
    • 有父类引用指向子类对象
    • 有方法的重写
  • 多态的好处
    • 使用父类型作为参数, 可以接收所有子类对象, 体现多态的扩展性和便利

多态中调用成员的特点

  • 调用成员变量的特点: 编译看左边, 运行看左边
  • 调用成员方法的特点: 编译看左边, 运行看右边
public class demo {
    public static void main(String[] args) {
        // 多态调用成员的特点

        Animal a = new Dog();

        System.out.println(a.name);
        a.show();

    }
}

class Animal{
    public String name = "动物";

    public void show()
    {
        System.out.println("Animal");
    }
}

class Dog extends Animal{
    private String name = "狗";

    public void show()
    {
        System.out.println("Dog");
    }
}

多态的优势和弊端

  • 多态的优势
    • 方法中, 使用父类型作为参数, 可以接收所有子类对象
  • 多态的弊端
    • 不能使用子类的特有功能
  • 引用数据类型的类型转换
    • 自动类型转换: Person p = new Student()
    • 强制类型转换: Student s = (Student)p
  • 强制类型转换解决什么问题
    • 可以转换成真正的子类类型, 从而调用子类独有功能
    • 转换类型与真实对象类型不一致会报错
    • 转换时用instanceof关键字进行判断

多态练习

  • demo
    public class demo {
        public static void main(String[] args) {
            /** 多态综合练习
             * 根据需求完成代码:
             * 	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中调用特有方法?
             */
            Person p1 = new Person("老王", 30);
            Person p2 = new Person("老李", 25);
    
            Dog dog = new Dog(2, "黑");
            Cat cat = new Cat(3, "灰");
    
            p1.keepPet(dog, "骨头");
            p2.keepPet(cat, "鱼");
        }
    }
    
  • Animal
    public class Animal {
        private int age;
        private String color;
    
        public void eat(String something){
            System.out.println("吃"+something);
        }
    
        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;
        }
    }
    
  • Dog
    public class Dog extends Animal{
    
        public Dog() {
        }
    
        public Dog(int age, String color) {
            super(age, color);
        }
    
        public void lookHome(){
            System.out.println("看家");
        }
    
        @Override
        public void eat(String something) {
            System.out.println(getAge()+"岁的"+getColor()+"颜色的狗两只前腿死死的抱住"+something+"猛吃");
        }
    }
    
  • Cat
    public class Cat extends Animal{
    
        public Cat() {
        }
    
        public Cat(int age, String color) {
            super(age, color);
        }
    
        public void catchMouse()
        {
            System.out.println("抓老鼠");
        }
    
        @Override
        public void eat(String something) {
            System.out.println(getAge()+"岁的"+getColor()+"颜色的猫眯着眼睛侧着头吃"+something);
        }
    }
    
  • Person
    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(Animal a, String something){
            if(a instanceof Dog dog){
                System.out.println("年龄为"+age+"岁的"+name+"养了一只"+a.getColor()+"的"+a.getAge()+"岁的狗");
                a.eat(something);
                dog.lookHome();
            }else if(a instanceof Cat cat){
                System.out.println("年龄为"+age+"岁的"+name+"养了一只"+a.getColor()+"的"+a.getAge()+"岁的猫");
                a.eat(something);
                cat.catchMouse();
            }
        }
    }
    

  • 包的作用
    包就是文件夹,用来管理各种不同功能的Java类
  • 包名书写的规则
    公司域名反写 + 包的作用,需要全部英文小写,见名知意
  • 什么是全类名
    包名 + 类名
  • 什么时候需要导包?什么时候不需要导包?
    • 使用同一个包中的类时,不需要导包
    • 使用java.lang包中的类时,不需要导包
    • 其他情况都需要导包
    • 如果同时使用两个包中的同名类,需要用全类名

final

  • final修饰方法: 最终方法, 不能被重写
  • final修饰类: 最终类, 不能被继承
  • final修饰变量: 是常量, 不能被修改
    • 基本数据类型: 变量的值不能修改
    • 引用数据类型: 地址值不能修改, 内部的属性值可以修改

权限修饰符

实际开发中, 一般只用private和public

  • 成员变量私有
  • 方法公开
  • 注意: 如果方法中的代码是抽取其他方法中共性代码, 这个方法一般也私有

代码块

  • 局部代码块
    • 提前结束变量的生命周期(已淘汰)
  • 构造代码块
    • 抽取构造方法中的重复代码(不够灵活)
  • 静态代码块的作用
    • 数据的初始化

来源

黑马程序员. 阿玮Java零基础

Gitee地址

https://gitee.com/yu-ba-ba-ba/awJava

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ScrollView 与 SliverPadding 的关系

基本页面布局 Scaffold 中有个 ListView&#xff0c;ListView 中有 100 个高 50 的 Container 用作辅助观看&#xff0c;ListView 中第三个元素是一个 GridView&#xff0c;GridView 的滑动效果被禁止。 class GiveView extends GetView<GiveController> {const GiveVi…

【Unity之UI编程】编写一个面板交互界面需要注意的细节

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

【Java】基于SpringBoot创建Web页面并热更新

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍基于SpringBoot创建Web页面并热更新。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

低价寄快递寄件微信小程序 实际商用版,对接了低价快递渠道,运营平台赚取差价,支持市面上全部主流快递

盈利模式 快递代下CPS就是用户通过线上的渠道&#xff08;快递小程序&#xff09;&#xff0c;线上下单寄快递来赚取差价&#xff0c;例如你的成本价是5元&#xff0c;你在后台比例设置里面设置 首重利润是1元&#xff0c;续重0.5元&#xff0c;用户下1kg的单页面显示的就是6元…

前端和空字符串、零比较时请务必使用===

在前端开发中遇到一个问题&#xff0c;以下两条语句的结果都是true。 console.log(0 ""); console.log(false ""); 这就导致了editingId为0的时候&#xff0c;if分支并没有执行&#xff0c;而我的本意是当editingId不是空也不是空字符串的时候执行分支…

SpringBoot 缓存之 @Cacheable 详细介绍

一、简介 1、缓存介绍 Spring 从 3.1 开始就引入了对 Cache 的支持。定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术。并支持使用 JCache&#xff08;JSR-107&#xff09;注解简化我们的开发。&#xfeff; 其…

Unity中Shader的间接光的产生Meta Pass

文章目录 前言Unity中Shader的间接光的产生Meta Pass&#xff0c;这也是属于全局光照 GI 的内容。主要实现像现实生活中&#xff0c;光线照到有颜色的物体后&#xff0c;该物体有反射出该颜色的光的效果。 一、我们先使用Unity自带的Shader看看间接光效果1、先按照如下设置搭建…

数字滤波器设计---FIR 滤波器设计

数字滤波器设计---FIR 滤波器设计 FIR 滤波器与 IIR 滤波器的比较 与无限持续时间冲激响应 (IIR) 滤波器相比&#xff0c;具有有限持续时间冲激响应的数字滤波器&#xff08;全零或 FIR 滤波器&#xff09;既有优点又有缺点。 FIR 滤波器具有以下主要优点&#xff1a; 它们可…

关于Android Studio 同步Gradle失败的解决方案

&#xff08;1&#xff09;打开Android Studio的Settings找到Gradle的目录 &#xff08;2&#xff09;打开本地文件目录&#xff0c;找到对应的gradle版本&#xff0c;可以通过Index of /gradle/ 下载gradle压缩包。把目录中gradle-7.0.2-bin\一堆字符\ 下 的.lck 和.part文…

数据管理系统-week1-文件系统、数据库和数据库管理系统

文章目录 前言一、 文件系统文件系统的限制 二、 数据库系统三、 数据库管理系统参考文献 前言 一、 文件系统 对于更高级的数据处理应用程序来说&#xff0c;基于数据块的持久存储逻辑模型过于简单数据块序列被划分为称为文件的数据块的可变子序列&#xff0c;与文件相关的名…

香港云服务器用于跨境电商外贸

港作为国际金融中心和互联网枢纽&#xff0c;具有非常发达的网络基础设施和优质的网络连接。这意味着在香港租用云服务器&#xff0c;外贸企业可以享受到高速稳定的网络连接&#xff0c;确保数据传输的安全和稳定性。这对于外贸企业来说至关重要&#xff0c;因为他们需要频繁地…

html+css+javascript打造网页内容浮动导航菜单

1需求分析 前段时间把“圳品”信息发布到网站上了&#xff0c;内容包括四大块&#xff1a; 按分布区域统计分析按产品类别统计分析按认定时间统计分析河池市“圳品”清单 导致网页很长&#xff0c;有同事反映说查看起来不是很方便&#xff0c;于是决定加上一个网页内容浮动导…

视通科技新品发布:4K30分布式编解码一体机,高性价比之选!

随着信息技术的日新月异&#xff0c;各领域对于音视频传输、控制和显示等方面的需求呈现出爆发式的增长。这种需求的增长源于多种因素&#xff0c;包括但不限于高清视频的普及&#xff0c;实时音视频通信的广泛应用&#xff0c;以及各种显示设备的升级换代。 在这样的背景下&a…

大数据治理——为业务提供持续的、可度量的价值(一)

目录 大数据治理——为业务提供持续的、可度量的价值... 1 概述... 2 大数据治理系列... 2 第一部分&#xff1a;大数据治理统一流程模型概述和明确元数据管理策略... 2 第二部分&#xff1a;元数据集成体系结构... 15 第三部分&#xff1a;实施元数据管理... 25 第四部…

基于ubuntu22.04手动安装openstack——2023.2版本(最新版)的问题汇总

前言&#xff1a;基本上按照openstack官方网站动手可以搭建成功&#xff08;如有需要私信发部署文档&#xff09;。 但是任然有些小问题&#xff0c;所以汇总如下。 第一个问题 问题&#xff1a; ubuntu搭建2023.2版本neutorn报错&#xff0c;ERROR neutron.plugins.ml2.driv…

传奇GOM引擎微端连接不上如何解决

Gom传奇引擎的微端连不上的原因可能有很多&#xff0c;比如网络问题、服务器配置问题、版本兼容性问题等。1.检查网络连接&#xff1a;首先要确保你的网络连接稳定。如果遇到网络问题&#xff0c;比如网络延迟过高&#xff0c;可能会导致你无法连接到服务器。建议使用稳定的网络…

Linux-基础知识

1.快捷键 ctrlc 强制停止 ctrld 退出或登出 history 查看历史命令&#xff08;&#xff01;/ctrlr输入内容去匹配历史命令&#xff09; 光标移动快捷键 ctrla,跳到命令开头 ctrle,跳到命令结尾 ctrl键盘左键&#xff0c;向左跳一个单词 ctrl键盘右键&…

Maven打包引入本地依赖包

Maven打包引入本地依赖包 SpringBoot 工程&#xff0c;Maven 在构建项目时&#xff0c;如何引入本地 Jar 包&#xff1f; 适合场景&#xff1a; 引用的依赖不在 Maven 仓库第三方公司提供的 SDK 包Maven 内网离线开发引入被定制改动过的 Jar 包 解决方法&#xff1a; 在 I…

数据分析实战 | KNN算法——病例自动诊断分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型训练 八、模型评价 九、模型调参 十、模型改进 十一、模型预测 一、数据及分析对象 CSV文件——“bc_data.csv” 数据集链接&#xff1a;https://dow…

共享变量可见性问题以及解决方案

文章目录 1. 简介2. 解决方案 1. 简介 首先在了解可见性问题之前我们首先需要给出Java 内存模型的定义&#xff08;JMM&#xff09;&#xff0c;java讲内存模型抽象为两个部分&#xff0c;主存以及工作内存&#xff0c;主 存也就是所有线程所共享的一段存储空间&#xff0c;工…