【多态-动态绑定-向上转型-抽象类】

news2024/11/25 2:53:50

文章目录

  • 静态绑定
  • 动态绑定
  • 多态的具体实现
  • 向上转型
  • 多态的优缺点
  • 抽象类
    • 抽象类的作用
  • 总结


静态绑定

重载就是典型例子
在这里插入图片描述

动态绑定

在这里插入图片描述

多态的具体实现

//多态
class Animal{

    public String name;
    public int age;
    //无参构造方法
    public Animal() {

    }
    //有参构造方法
    public Animal(String name,int age) {
        this.name = name;
        this.age = age;
    }
    //成员方法
    public void eat(){
        System.out.println(this.name+"正在吃饭");
    }

}
class Dog extends Animal {

    //子类构造完成之前要帮助父类构造完成
    public Dog(String name, int age) {
        super(name, age);
    }
    //重写eat方法
    public void eat() {
        System.out.println(this.name + "正在吃狗粮");

    }
}
class Cat extends Animal {

    //子类构造完成之前要帮助父类构造完成
    public Cat(String name, int age) {
        super(name, age);
    }
    //重写eat方法
    public void eat() {
        System.out.println(this.name + "正在吃猫粮");

    }
}
public class Test {
    //多态的第一种
    public static void func(Animal animal){
        animal.eat();//向上转型中的方法传参
    }
    public static void main(String[] args) {
        Dog dog = new Dog("红红",12);
        func(dog);
         Cat cat = new Cat("青青",13);
        func(cat);
    }
    
    //多态的第二种
    public static void main2(String[] args) {
        Animal animal = new Dog("红红",12);//向上转型中的直接赋值
        animal.eat();
        Animal animal2 = new Cat("青青",13);
        animal2.eat();
    }

}

在这里插入图片描述

向上转型

语法格式:父类类型 对象名 = new 子类类型()

animal是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的转换。

【使用场景】
例如上面的代码中

  1. 直接赋值
    例如上面的代码
Animal animal = new Dog("红红",12);
  1. 方法传参
    例如上面的代码
   public static void func(Animal animal){
        animal.eat();
    }
  1. 方法返回
//  作返回值:返回任意子类对象
public static Animal buyAnimal(String var){
if("狗".equals(var) ){
return new Dog("狗狗",1);
}else if("猫" .equals(var)){
return new Cat("猫猫", 1);
}else{
return null;
}
}

总结:
向上转型的优点:让代码实现更简单灵活。
向上转型的缺陷:不能调用到子类特有的方法

多态的优缺点

【使用多态的好处】

  1. 能够降低代码的 “圈复杂度”, 避免使用大量的 if - else
  2. 可扩展能力更强
    如果要新增一种新的形状, 使用多态的方式代码改动成本也比较低

【多态缺陷】
3. 代码的运行效率降低。
4. 属性没有多态性
当父类和子类都有同名属性的时候,通过父类引用,只能引用父类自己的成员属性
5. 构造方法没有多态性

【避免在构造方法中调用重写的方法】
尽量不要在构造器中调用方法(如果这个方法被子类重写, 就会触
发动态绑定, 但是此时子类对象还没构造完成), 可能会出现一些隐藏的但是又极难发现的问题。

抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
在这里插入图片描述

1.被abstract修饰的类叫做抽象类
2.被abstract修饰的方法叫做抽象方法
3.抽象类不可以实例化

在这里插入图片描述
4.当一个普通类继承了抽象类,那么需要重写这个抽象类中的所有抽象方法!!

abstract class Shape{
    public abstract void draw();
}
class Cycle extends Shape{
    @Override
    public void draw() {
        System.out.println("⚪");
    }
}

如果不继承 ,子类也是抽象类,必须要使用 abstract 修饰

abstract class C{
    public abstract void draw();
}
abstract class A extends C {
   abstract public void run();
}
class B extends A{
    @Override
    public void draw() {
        
    }

    @Override
    public void run() {

    }
}

总结:抽象类的出现就是为了被继承

abstract class Shape{
    public abstract void draw();
}
class Cycle extends Shape{
    //重写抽象类的抽象方法
    @Override
    public void draw() {
        System.out.println("⚪");
    }
}class Rect extends Shape{
    //重写抽象类的抽象方法
    @Override
    public void draw() {
        System.out.println("矩形");
    }
}
public class Test {

    public static void func(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {
        Shape shape =new Cycle();
        Shape shape2 =new Rect();
        shape.draw();
        shape2.draw();
    }
}

7.abstract 和final 是天敌,不能共存
8.private 、static 也不可以修饰 抽象方法

抽象类的作用

在这里插入图片描述

总结

继承多态之间涉及到的子类构造方法,向上转型,动态绑定,以及抽象类和继承的关系等等知识还是挺复杂的,多写写代码思路会清晰些。

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

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

相关文章

MySQL安装『适用于 CentOS 7』

✨个人主页: 北 海 🎉所属专栏: MySQL 学习 🎃操作环境: CentOS 7.6 腾讯云远程服务器 🎁软件版本: MySQL 5.7.44 文章目录 1.MySQL 的清理与安装1.1查看是否存在 MySQL 服务1.2.卸载原有服务1.…

每日Python:十个实用代码技巧

1、Jpg转Png 示例代码: # 图片格式转换, Jpg转Png# 方法① from PIL import Imageimg Image.open(demo.jpg) img.save(demo_open.png)# 方法② from cv2 import imread, imwriteimage imread("demo.jpg", 1) imwrite("demo_imread.png", im…

近年来上海高考数学命题趋势和备考建议,附1990年以来真题和解析

这篇文章六分成长为您介绍上海高考数学科目的一些分析和如何备考2024年的上海高考数学,并且为您提供1990-2023年的34年的上海高考数学真题和答案解析,供您反复研究。 一、上海高考数学题近年来的命题特点和趋势 1. 注重基础知识和基本技能:…

一文带你在GPU环境下配置YOLO8目标跟踪运行环境

本文介绍GPU下YOLO8目标跟踪任务环境配置、也即GPU下YOLO8目标检测任务环境配置。 YOLO8不仅仅可以实现目标检测,其还内置有Byte-Tracker、Bot-Tracker多目标跟踪算法。可以实现行人追踪统计、车流量跟踪统计等功能。值得注意的是Byte-Tracker、Bot-Tracker多目标跟…

全面详细讲解OSEK直接网络管理,并对比Autosar网管。

搞了两年的Autosar,用到的网络管理都是Autosar网络管理,虽然偶尔有听到或看到Osek网络管理,但是一直没机会具体进行开发和测试。最近有机会具体接触和开发到,弄完之后感受就是:还是Autosar的网络管理好用,O…

10、SpringCloud -- 优化重复下单

目录 优化重复下单问题的产生:需求:思路:代码:测试:优化重复下单 之前超卖、重复下单的解决方式 问题的产生: 比如这个秒杀活动没人去玩,只有一个人去参与秒杀,然后秒杀成功了,因为有联合索引,所以这个人他没法重复下单,但是他依然去请求秒杀,在秒杀的10个商品没…

设计模式大赏(一):桥接模式,组合模式

设计模式大赏(一):桥接模式,组合模式 导言 本篇文章是设计模式大赏中的第一篇文章,这个系列的文章中我们主要将介绍一些常见的设计模式,主要是我在看Android源码中发现用到的一些设计模式。本篇文章将主要…

Android 快速实现隐私协议跳转链接

首先在string.xml创建对应字串 <string name"link">我已仔细阅读并同意<annotation value"privacy_policy">《隐私政策》</annotation>和<annotation value"service_agreement">《服务协议》</annotation></st…

十八、模型构建器(ModelBuilder)快速提取城市建成区——批量掩膜提取夜光数据、夜光数据转面、面数据融合、要素转Excel(基于参考比较法)

一、前言 前文实现批量投影栅格、转为整型,接下来重点实现批量提取夜光数据,夜光数据转面、夜光数据面数据融合、要素转Excel。将相关结果转为Excel,接下来就是在Excel中进行阈值的确定,阈值确定无法通过批量操作,除非采用其他方式,但是那样的学习成本较高,对于参考比较…

c++设计模式三:工厂模式

本文通过一个例子简单介绍简单工厂模式、工厂模式和抽象工厂模式。 1.简单工厂&#xff08;静态&#xff09; 假如我想换个手机&#xff0c;换什么手机呢&#xff1f;可以考虑苹果或者华为手机&#xff0c;那我们用简单工厂模式来实现这个功能&#xff1a; 我们关注的产品是手…

人工智能与航天技术的融合:未来发展的新趋势

人工智能与航天技术的融合&#xff1a;未来发展的新趋势 随着科技的飞速发展&#xff0c;人工智能和航天技术已经成为人类探索未知世界的重要工具。本文将探讨这两个领域的结合点&#xff0c;以及未来的发展趋势和应用前景。通过了解这些技术&#xff0c;读者将更好地理解人工…

用Python定义一个函数,用递归的方式模拟汉诺塔问题

【任务需求】 定义一个函数&#xff0c;用递归的方式模拟汉诺塔问题&#xff0c;三个柱子&#xff0c;分别为A、B、C&#xff0c;其中A柱子上有N个盘子&#xff0c;从小到大编号为1到N&#xff0c;盘子大小不同。现在要将这N个盘子从A柱子移动到C柱子上&#xff0c;但移动的过…

段页式管理方式

一、分段、分页的优缺点 1.分页管理&#xff1a;内存空间利用率高&#xff0c;无外部碎片&#xff0c;只有少量页内碎片&#xff0c;以物理结构划分&#xff0c;不便于按逻辑方式实现信息共享和保护 2.分段管理&#xff1a;为段长过大分配连续空间会很不方便&#xff0c;会产生…

Nginx动静分离以及防盗链问题

目录 1.动静分离 1.1概念 1.2准备环境 1.3.测试访问 2.Nginx防盗链问题 2.1nginx 防止网站资源被盗用模块 2.2防盗链配置 2.3准备两台机器 2.4测试 ①开启防盗链 ②让盗链ip可一访问服务资源 ③防盗链不设置none参数 1.动静分离 1.1概念 为了加快网站的解析速度&…

【图像分类】钢轨表面缺陷分类数据集介绍(4个类别)

写在前面&#xff1a; 首先感谢兄弟们的支持&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

Pytorch入门实例

数据集是受教育年限和收入,如下图 代码如下 import torch import numpy as np import matplotlib.pyplot as plt import pandas as pd import torch.nn as nn import torch.optim as optimdata pd.read_csv(./Income.csv)X torch.from_numpy(data.Education.values.reshape…

Windows环境下MosQuitto服务器搭建,安装mqtt服务端软件

1、下载、安装MosQuitto服务器 下载地址&#xff1a;http://mosquitto.org/files/binary/ 根据平台选择相应的代码下载。 安装完成后&#xff0c;安装文件夹下部分文件的功能

私有云:【9】Connection配置

私有云&#xff1a;【9】Connection配置 1、关闭IE增强配置2、Connection配置2.1、登录connection管理台配置许可证2.2、添加VCenter主机2.3、配置Composer 1、关闭IE增强配置 关闭此项 全部关闭 2、Connection配置 2.1、登录connection管理台配置许可证 上一章connection…

DevChat:你的私人助理,让工作变得如此简单!

前言&#xff1a; 首先我们来浅浅说下AI吧。有小伙伴把AI看得十分“高高在上”&#xff0c;觉得它属于“诸神之战”&#xff0c;与我等凡人无关。其实这个看法是不对的。就好像我们刚开始对于手机系统或者电脑系统感觉很有陌生感一样&#xff0c;一直到技术落地到抖音、微信等…

复习Animate和木疙瘩学习笔记-动画制作的回家之路

这个融媒体H5制作平台功能比较完善&#xff1a;包含了Flash(现在叫Animate)传统H5网页制作 720全景视频制作发布网页&#xff01; 主要功能&#xff1a;素材导入、2D动画制作、常见交互添加、发布生成链接二维码 基本就是一个制作H5为主&#xff0c;但是里面的动画可以依赖4种…