《疯狂Java讲义》读书笔记3

这两天总结了数据结构中栈的用法,对栈的初始化、出栈、入栈的总结:

http://t.csdn.cn/7sKjQ

对双栈共享的初始化、入栈、出栈的总结:

http://t.csdn.cn/4WXCO

调用父类构造器

子类不会获得父类的构造器,但是可以调用父类构造器的初始化代码,类似于重载。

通过 super 来调用父类构造器的初始化过程。

super 调用必须出现在执行体的第一行,且this 调用和 super 调用不会同时出现。

当调用子类的初始化构造器时,会先执行父类构造器,父类构造器会继续上溯到它的父类构造器,所以最先执行的是 java.lang.Object 类的构造器。(Object 类是所有类的父类或者是间接父类)

调用关系如下面的代码:

package com.ittht.day05;

class Creature{
    public Creature(){
        System.out.println("无参");
    }
}
class Animal extends Creature{
    public Animal(String name){
        System.out.println("有一个参");
    }
    public Animal(String name,int age){
        this(name);
        System.out.println("有两个参");
    }
}
public class Wolf extends Animal{
    public Wolf(){
        super("apple",5);
        System.out.println("wolf无参");
    }

    public static void main(String[] args) {
        new Wolf();
        /*会输出"无参
                有两个参
                wolf无参“
                         */
    }
}

多态

编译时类型和运行时类型不同,有可能发生多态。

编译时类型是父类,运行是类型是子类,此时该方法行为总是表现为子类的行为特征,但是父类不存在的方法变量不能调用,会编译错误。

package com.ittht.day05;
class BaseClassOne{
    public int book=10;
    public void base(){
        System.out.println("父类的普通方法");
    }
    public void test(){
        System.out.println("父类被子类覆盖的方法");
    }
}
public class Class extends  BaseClassOne{
    public String book="讲义";
    public void sub(){
        System.out.println("子类的普通方法");
    }
    public void test(){
        System.out.println("覆盖父类的方法");
    }

    public static void main(String[] args) {
        //编译方法和运行方法都是BaseClass的实例
        BaseClassOne Bcl=new BaseClassOne();
        System.out.println(Bcl.book);//10
        Bcl.test();//父类的普通方法
        Bcl.base();//父类被子类覆盖的方法

        //编译方法和运行方法都是Class的实例
        Class C=new Class();
        System.out.println(C.book);//讲义
        C.sub();//子类的普通方法
        C.test();//覆盖父类的方法

        //多态发生
        //编译方法和运行方法不同
        BaseClassOne tc =new Class();
        System.out.println(tc.book);//10
        tc.base();//父类的普通方法
        tc.test();//覆盖父类的方法
        //tc.sub();/*编译会出现错误,BaseClassOne没有提供sub方法*/
    }

}

引用变量的强制类型转换

基本类型之间可以在数值间转换,但数值类型和布尔类型不能转换;

引用类型的转换只能在具有继承关系的两个类型之间运行(编译时类型是子类类型,运行时类型为子=父类类型),两个没有任何继承关系的类型不能进行类型转换。

对于 valueOf() 的方法:

package com.ittht.day05;

public class ConversionTest {
    public static void main(String[] args) {
        double num=2.66;
        long NUM=(long)num;
        System.out.println(NUM);

        int in=5;
        //boolean on=(boolean)in;/*在数值和布尔类型间不能转换,所以会出错*/
        Object object ="Hello";
        String str=(String)object;
        System.out.println(str);

        Object object1=Integer.valueOf(5);
        //Object和Integer存在继承关系
        //String str1=(String)object1;
    }
}

instanceof 运算符

instanceof 运算符前面的操作数的编译时类型要么与后面的类的相同,要么与后面的类具有父子继承关系,否则会编译错误。

package com.ittht.day05;

public class Instanceof {
    public static void main(String[] args) {
        Object hello="hello";
        //hello是Object的实例,返回true
        System.out.println(hello instanceof Object);
        //hello的实际类型是String
        System.out.println(hello instanceof String);
        //Math与Object存在继承关系,但是返回false
        System.out.println(hello instanceof Math);
        //String实现了Comparable的借口,返回true
        System.out.println(hello instanceof Comparable);
    }


}

组合复用

对于继承,子类可以直接活动父类的 public 方法,程序使用子类时,可以直接访问该子类从父类继承到的方法;

组合是把旧类对象作为新类的成员变量组合起来,允许在新类里访问该子类从父类继承到的方法。

package com.ittht.day05;
class Animal{
    public void beat(){
        System.out.println("心脏跳动");
    }
    public void breathe(){
        beat();
        System.out.println("吸一口气,呼一口气");
    }

}
class Wolf extends Animal{
    public void run(){
        breathe();//继承父类的breathe方法
        System.out.println("跑");
    }
}
class Bird extends Animal{
    public void fly(){
        breathe();//
        System.out.println("飞");
    }
}
public class InheritTest {
    public static void main(String[] args) {
        Wolf w=new Wolf();
        w.breathe();
        w.run();
        Bird b=new Bird();
        b.fly();
        b.breathe();
    }
}

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

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

相关文章

聊一聊前端的性能指标

一、前端性能指标有哪些? 根据 chrome Lighthouse 最新规则,前端性能指标考量主要有 FCP(First Contenful Paint)、SI(Speed Index)、LCP(Largest Contentful Paint)、TBT&#xff…

四个常见的Linux技术面问题

刚毕业要找工作了,只要是你找工作就会有面试这个环节,那么在面试环节中,有哪些注意事项值得我的关注呢?特别是专业技术岗位,这样的岗位询问一般都是在职的工程师,如何在面试环节更好地理解面试官的问题&…

IDEA的热部署【MyBatis XML热部署 】

本文适用修改JAVA代码热部署、MyBatis XML的热部署。 一、JAVA代码热部署. 新版IDEA中:开启允许在运行过程中修改文件 最后要在Debug模式启动,可以看到热部署的加载文件了,可以手动点左边那个图标立即加载生效. 二、MyBatis XML修改热部署. MybatisMap…

MFCC语音特征值提取算法

博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的&#xff0c…

银行数字化转型导师坚鹏:银行产品经理技能快速提升之道

银行产品经理技能快速提升之道 ——以推动银行战略目标实现为核心,实现知行果合一课程背景: 很多银行都在开展产品经理技能提升工作,目前存在以下问题急需解决: 不知道银行产品经理掌握哪些关键知识? 不清楚如何有效…

C++修炼之练气期第二层——缺省参数

目录 1.缺省参数的概念 2.缺省参数的分类 全缺省参数 半缺省参数 实用场景示例 1.缺省参数的概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。 在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。 #inclu…

四大排序算法之归并排序

说明 为了自己学习方便,我这里总结了四大排序算法涵盖了七种排序算法 分类算法名称时间复杂度 空间复杂度稳定性插入排序 直接插入排序 希尔排序 O(n^2) O(1) O(n^2/3) O(1) 稳定 不稳定 选择排序 选择排序 堆排序 O(n^2) O(1) O(nlogn) O(1) 不稳…

linux查看进程、端口

1、先查看进程pidps -ef | grep 进程名如果已知pid,想看详情,则用 ps -ef pid2、通过pid查看占用端口(mac)netstat -na | grep 端口netstat -nap tcp | grep 进程pidnetstat -nap udp | grep 进程pid不加tcp或者udp的话mac上会报错:netstat常…

基于ASP的反垃圾邮件管理系统的设计与实现

随着Internet的迅速普及,电子邮件以其快捷、方便、低成本的特点逐渐成为人们进行信息交流的主要媒介之一,但是随之而来的垃圾邮件也越来越泛滥。垃圾邮件占用了有限的存储、计算和网络资源,耗费了用户大量的处理时间,影响和干扰了…

程序员OKR学习法

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl OKR管理法 OKR(Objectives and Key Results)管理法是一种目标管理方法,旨在通过制定明确的目标和可量化的关键结果来帮助组织、团队和个人…

RocketMQ的架构图

文章目录RocketMQ 技术架构中有四大角色 NameServer 、Broker 、Producer 、Consumer 。我来向大家分别解释一下这四个角色是干啥的。 Broker: 主要负责消息的存储、投递和查询以及服务高可用保证。说白了就是消息队列服务器嘛,生产者生产消息到 Broker…

Hive实战 --- 电子商务消费行为分析

目录 数据结构 Customer表 Transaction表 Store表 Review表 上传数据 创建目录用于存放数据 把本地文件上传到HDFS上 创建外部表 创建数据库 创建表 数据清洗 对transaction_details中的重复数据生成新ID 过滤掉store_review中没有评分的数据 找出PII (personal …

【web前端初级课程】第八章 什么是事件?

目录 一、事件情况汇总 二、标签绑定 三、使用DOM0事件模型 四、使用DOM2事件模型 五、相关练习:图片切换 一、事件情况汇总 事件分为三部分:事件源:绑定事件的标签、事件对象:就是事件产生的相关数据、事件处理函数 二、标…

Java使用功能方法交换a,b的值,通过构造方法输出姓名、年龄、家庭地址

目录 前言 一、使用功能方法交换a,b的值 1.1运行流程(思想) 1.2代码段 1.3运行截图 二、通过构造方法输出姓名、年龄、家庭地址 1.1运行流程(思想) 1.2代码段 1.3运行截图 前言 1.因多重原因,所以我…

愚人节,聊聊那些正在坑人的“新型AI”

几年前的一个愚人节,我们和大家聊过AI技术被作为诈骗工具的情况。很不幸,当时讨论的一些苗头,现在都成了电诈犯罪中屡见不鲜的手段。更可气的是,随着AI技术与应用本身的发展,犯罪分子的AI手段不减反增。一些“新型AI”…

(七)Tomcat源码阅读:Host组件分析

一、概述 Host类中比较重要的类就是HostConfig其它类实现的功能和之前的组件差不多,这里就不多介绍了。 二、阅读源码 1、HostConfig (1)重要方法 lifecycleEvent: 根据对应的方法设置对应的属性,并调用对应的方…

自己写gpt的软件教程-国内最好的chatgpt软件

GPT-3是一种非常强大的自然语言处理技术,可以为用户生成高质量的文本内容。虽然GPT-3最初是为英文而设计的,但是近年来,GPT-3在中文领域也变得越来越流行。在本篇教程中,我们将详细介绍如何在GPT-3中生成中文内容。 一、准备工作 …

第二天并发篇

一、线程状态 1.新建(New):创建线程对象时 2.就绪(Runnable):线程调用start方法,有执行资格没有执行权 3.运行:当就绪状态时抢到cpu的执行权之后,进入运行状态 4.阻塞&am…

过程控制系统中的模块技术MTP

在过程自动化行业中,模块化设备概念近年来越来越受欢迎。其中最热门的是MTP。MTP称为模块类型封装,它是过程工业自动化技术用户协会(NAMUR)提出的过程自动化行业的模块化标准,通过这种模型,开发工作的重点从…

C++(Qt)软件调试---linux下生成/调试Core文件(3)

#软件调试 C(Qt)软件调试—linux下生成/调试Core文件(3) 文章目录C(Qt)软件调试---linux下生成/调试Core文件(3)前言1、C生成Core和使用GDB调试1、环境2、C生成Core文件3、使用gdb工具调试core可定位段错误位置;4、修…
最新文章