首页 > 编程语言 >java 多态学习笔记

java 多态学习笔记

时间:2023-01-20 16:56:51浏览次数:45  
标签:调用 java show 子类 多态 笔记 Dog 父类

因为在想去一个家乡的小国企,每个月五六千块钱或许也不错,所以懈怠了学习。但是论语中有说:取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣。如果我想着只是进一个小地方的国企,那么最后可能连找到工作都很悬。意识到错误,所以又来加紧学习的步伐了。

而且我相信论语中的这些话是对的。因为我读研初期,想着发sci一区的文章,所以很努力的学习,虽然现在因为导师的培养方针和实验室的规划影响,我已经是“只要能毕业就行了”,但是最开始的学习,让我不用担心自己一点成果也没有而无法毕业。但如果一开始我就抱持着“只要能毕业就行了”这种想法,可能现在就真的很担心是否能毕业了。(当然也有可能老师觉得我没有潜力直接给我一篇专利让我毕业……)

目录

多态

封装、继承、多态

对象代表什么,就得封装对应的数据,并提供数据对应的行为。将零散的内容归纳为一个整体。没有封装就没有继承和多态。

继承解决了程序内容冗余的问题。

多态可以将子类类型赋值给父类。多态是同类型的对象,表现出的不同形态。

// Person是Student的父类
Person p = new Student();

多态应用场景

同一个应用系统的注册,不需要多套底层逻辑!

可以通过各类对象共同的父类作为传入对象来构建方法。并可以调用各类中各自的成员方法。

多态的表现形式与应用前提

父类类型 对象名称 = 子类对象;

  • 使用多态要求有继承/实现关系。

  • 有父类引用指向子类对象("指向"就是“=”)

  • 需要有方法重写

多态调用成员的特点

调用成员变量

public class Test {
	public static void main(String[] args) {
	Animal a = new Dog();
	sout(a.name); // 会打印出"动物",编译或运行时会查看父类中是否有name变量,如果父类中没有,无论是编译or运行都是父类中的。
	sout(a.show());// 会打印“dog show”,编译时会查看父类中是否有show()方法,但在运行时,会运行重写的子类中的方法。
	}
}

父类Animal

class Animal{
    String name = "动物";
    public void show() {
    sout("animal show.");
    }
}

子类Dog

class Dog{
    String name = "狗";
    public void show() {
    sout("Dog show.");
    }
	
	public void eat() {
	sout("吃骨头");
	}
}

多态的优势和缺点

多态的优势

  1. 在多态形式下,右边对象可以实现解耦合,便于扩展和维护。
Person p = new Student();
p.work();//工作交由学生进行

但倘若工作计划发生变更,工作交由教师进行:

Person p = new Teacher();
p.work();//只需在右侧更改对象类为teacher即可,即:业务逻辑发生改变时,后续代码无需修改
  1. 定义方法时,使用父类作为参数,可以接受所有子类对象,体现多态的扩展性与遍历

比如:ArrayList<> 倘若没有定义存储变量的类型,其add方法中可以直接add "object",而object是顶级父类,也就是可以添加所有类型的数据。

多态的缺陷

不能调用子类的特有功能:子类中新创建的方法,不能直接在创建的多态的对象上调用新方法。因为在编译的时候会检查父类中是否有相同名称的方法,但子类中新创建的方法在父类中显然是不存在的,所以不能直接调用。

  • 解决办法

把调用者重新变回子类类型就可以了。

Animal a = new Dog();

a.eat(); //会报错,因为父类中没有eat()方法,如果需要调用子类中的方法,需要强制转换
Dog d = (Dog)a;
d.eat();

倘若我是一颗明珠,请为我擦去沾染的灰尘,再把我放在明亮的展台,让我放光彩!
可是您也从不是珠宝师,也没有珠宝盒。
我与您生而相同,只是我不愿同您一起,浮空飘零。
我是一粒愿沉于大地的灰尘,只想拜托您不要呼唤起风!
——《请让我平庸,妈妈!》

标签:调用,java,show,子类,多态,笔记,Dog,父类
From: https://www.cnblogs.com/xiaoaozi/p/17062762.html

相关文章

  • LeetCode——刷题笔记二
         ......
  • JavaScript 中断forEach循环
    1、使用Array.prototype.some()方法代替some()方法会在找到第一个符合条件的元素时停止循环。例如:letarray=[1,2,3,4,5];array.some(function(element,inde......
  • fabric学习笔记9
    fabric学习笔记920201303张奕博2023.1.20PythonWeb3与智能合约的交互开发合约,或者开源合约,都会有一份该合约的ABIJSON文件ABI文件包括了智能合约的输入与输出格......
  • java HTML5
    HTML超文本标记语言W3C万维网联盟W3C标准包括:结构化标准语言(HTML,XML)表现标准语言(CSS)行为标准(DOM,ECMAScropt) 网页基本信息使用<!--注释内容-->进行注释......
  • java IO流
    起因:学习网编,发现里面的课程大量用到了io的知识,十分影响学习,所以转战io何为“流”流:数据在数据源(文件)和程序(内存)之间经历的路径输入流:数据从数据源(文件)到程序(内存)的路径......
  • java CSS3
    CSS层叠级联样式表快速入门CSS可以在html文件中写,写在<style>中,一般style写在head中(HTML,CSS没有分离)<style> h1(选择器){可以设置h1的属性(声明,分号结尾)......
  • javaWeb
    在java中,动态web资源开发的技术统称为JavaWeb一些默认tomcat:8080mysql:3306http:80https:443默认的主机名:loaclhost->127.0.0.1默认网站应用存放的位置:webapps......
  • javaScript
    JavaScript是一门流行脚本快速入门跟css一样,可以直接写在html中,放在script标签中alert可以弹出弹窗,内容用单引号引入的时候一定要成对出现,不能自闭和 基本语法入门......
  • java 继承 补充:子类能继承父类中的哪些内容?
    目录继承内存图构造方法的继承成员变量的继承成员方法的继承继承的特点成员变量的访问特点成员方法的访问特点方法的重写构造方法的访问特点继承内存图父类中有:成员变量......
  • Java反编译
    Java反编译java在编译的过程中会将源代码进行一次预编译,编译成后缀名为class的字节码源文件后将.class文件转载进类装载器中从而加载到jvm中,加载到jvm中后字节码校验器会......