Java中static静态变量--继承等相关知识

news2024/9/8 23:39:46

目录

static

继承:

继承的特点:

案例:自己设计一个继承体系练习:

设计思想:

代码:

子类到底能继承父类的哪些类容?

成员变量内存的继承情况:

成员方法的内存继承情况:

继承中访问的特点:

成员变量的访问特点:就近原则

成员方法的访问特点:

方法的重写:

继承中构造方法的访问特点:

案例:带有继承结构的标准Javabean类


static

静态方法中不能非静态的东西,非静态的东西比如成员变量,成员方法。(本质上没有this的原因)静态方法中没有this关键字,静态方法中,只能访问静态,非静态方法可以访问所有(非静态的方法中是有this,也可以通过this调用静态中的东西)。

继承:

什么时候用继承呢?

当类与类之间,存在相同的内容,并满足子类是父类中的一种,就可以考虑使用继承来优化代码。

继承的特点:

Java只支持单继承(一个子类只能继承一个父类)不支持多继承(子类不能支持多个父类),但是可以多层继承的(子类a继承父类b,父类b继承父类c是可以的,c是a的间接父类);简单理解:儿子不能有多个爸爸。

c++语言中是允许多继承的。

默认父类object。

案例:自己设计一个继承体系练习:

设计思想:

代码:
package jicheng;

public class Animal {
    public void eat() {
        System.out.println("吃东西");
    }
    public void drink() {
        System.out.println("喝水");
    }
}
package jicheng;

public class buoucat extends cat{

}
package jicheng;

public class cat extends Animal {
    public void cotch(){
        System.out.println("猫抓老鼠");
    }
}
package jicheng;

public class dog {
    public void lookhome    () {
        System.out.println("狗看家");
    }
}
package jicheng;

public class husky extends dog{
    public void breakhome(){
        System.out.println("哈士奇在拆家");
    }
}
package jicheng;

public class lihuacat extends cat{
}
package jicheng;

public class Teddy extends dog{
    public void touch(){
        System.out.println("泰迪touch");
    }
}
package jicheng;

public class TEXT {
    public static void main(String[] args) {
        //创建布偶猫对象
        buoucat rd = new buoucat();
        rd.eat();
        rd.drink();
        rd.cotch();
        System.out.println("==============");
        //创建哈士奇对象

       husky d = new husky();
        d.lookhome();
        d.breakhome();

    }
}

运行结果:

注意点:

子类到底能继承父类的哪些类容?

成员变量都可以被继承下来,但是能不能用还要具体看。

一个类要被使用,要先把字节码文件加载到方法区

成员变量内存的继承情况:

如下图:继承内存图:和之前有两处不一样,在方法区加载字节码文件的时候它会把父类也加载过来。堆内存中,在创建对象的时候,里面是有一部分从父类继承过来的成员变量,还有一部分是存储子类的成员变量。

在Java虚拟机中有一个“保洁阿姨”也就是垃圾回收器,会在合适的时候把垃圾清理掉。

如下图:当“老爹”用的private,“儿子”就调用不了,但是也会把父类加载出来

成员方法的内存继承情况:

成员方法的继承,当方法比较多的时候,一个一个的继承太不切实际。顶层的方法会抽取经常用的方法构成一个虚方法表,这个方法表是非private,非static,非final的。在底层在调用的时候,直接在虚方法表中找:

内存:

子类继承父类的方法,父类的方法能够加载到虚方法表中就可以被继承,不能够加载到虚拟方法表中就不能被调用。

内存分析工具在这个视频37分27秒处:面向对象进阶-06-子类到底能继承父类中的哪些内容_哔哩哔哩_bilibili

继承中访问的特点:

成员变量的访问特点:就近原则

(this是在本类成员变量里面找)

成员方法的访问特点:

和成员变量访问特点相似

方法的重写:

方法的重写:本质上是覆盖了虚方法表中的方法,如下图:

第5条第6条,不严谨,实际上只有被添加到虚方法表中的方法才能被重写。!!!!!!!

案例:利用方法重写设计继承结构-》这个视频的36分27秒开始面向对象进阶-07-继承中成员变量和成员方法的访问特点_哔哩哔哩_bilibili

继承中构造方法的访问特点:

构造方法部分:面向对象进阶-08-继承中的构造方法和thissuper关键字_哔哩哔哩_bilibili

案例:带有继承结构的标准Javabean类

案例后面补:在这个视频的20分30秒处面向对象进阶-08-继承中的构造方法和thissuper关键字_哔哩哔哩_bilibili

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

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

相关文章

项目经理的开源工具指南:优化您的选择过程

国内外主流的10款开源项目管理系统对比:PingCode、Worktile、禅道、Teambition、Gogs、码云 Gitee、Jira、Redmine、ProjectLibre、OpenProject。 在选择合适的开源项目管理系统时,很多团队面临诸多挑战:功能是否全面?易用性如何&…

C++初学(7)

7.1、字符串 字符串是存储在内存的连续字节中的一系列字符。C处理字符串的方式有两种,第一种是来自C语言,常被称为C风格字符串,另一种则是基于string类库的方法。 存储在连续字节中的一系列字符意味着可以将字符存储在char数组中&#xff0…

Mecanim Animation System

动画系统简介 Unity 有一个非常丰富而又复杂的动画系统,官方称其为Mecanim。该系统具有以下功能: 支持从外部导入动画剪辑,如:fbx、mb | ma(Autodesk maya 原件)、.max(3ds Max原件&#xff09…

5.仓颉编程_数组使用与异常捕捉

5.仓颉编程_数组使用与异常捕捉 数字数组与字符串数组 import std.console.*main() {var qty 10var zero2 0var array [1,2,3] //数组var str_arr:Array<String> [aa,bb]try {//qty qty / zero2//println(qty)println(str_arr[0])println(array[0])// println(arr…

rhce THE homework of first

ssh远程免密登录成功 下载httpd和nginx 关闭防火墙 查看selinux的状态 为服务器配置ip 填充网站的内容 添加服务器配置 将文本写入网站

2024电赛H题参考方案(+视频演示)——自动行使小车

目录 一、题目要求 二、参考资源获取 三、参考方案 1、环境搭建及工程移植 2、移植MPU6050模块 3、移植TB6612电机驱动模块 4、整体控制方案视频演示 总结 一、题目要求 小编自认为&#xff1a;此次H题属于控制类题目&#xff0c;相较于往年较为简单&#xff0c;功能也算单一&a…

深入解析 GZIP 压缩传输:优化网络性能的利器

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

MATLAB中“varargin”的作用

varargin是什么&#xff1f; 在MATLAB中&#xff0c;varargin是一个特殊的变量&#xff0c;用于接收函数输入参数中的可变数量的参数。它允许用户在调用函数时传递不确定数量的参数。 varargin的本质是一个包含了所有可变参数的cell数组。在函数内部&#xff0c;可以使用cell…

dpdk 响应icmp请求(Echo or Echo Reply Message)

注&#xff1a;对于"Echo or Echo Reply Message"类型的icmp报文&#xff0c;响应报文的Identiy和Sequence Number的值与请求报文的这两个字段的值要相同。 Identifier&#xff08;标识符&#xff09;字段通常由发送方设置&#xff0c;并被用于将ICMP请求与相应的回复…

Lombok注解之@SneakyThrows作用

Lombok注解之SneakyThrows作用 读法 [ˈsniːki] [θroʊz] 悄悄的 抛出顾名思义&#xff0c;它能够自动偷摸的为咱们的代码生成一个try…catch块&#xff0c;并把异常向上抛出来。 使用 SneakyThrows的使用范围&#xff1a; 只能作用在方法和构造函数之上。从源码就可以…

【C++】选择结构-多条件if语句

多条件if语句格式为 if(第一个条件) else if(若第一个条件未满足&#xff0c;执行此条件) {第二个条件满足执行此操作} else if(若第二个条件未满足&#xff0c;执行此条件) {第三个条件满足执行此操作} ...... else{若所有条件都不满足执行此操作} 下面是一个实例 #inc…

app逆向实战:某咨询6.0.4.4版本signature等参数抓包与破解

本篇博客旨在记录学习过程&#xff0c;不可用于商用等其它途径 入口 密码登录接口 抓包 根据抓包结果得知动态参数是client_timestamp&#xff0c;keyword&#xff0c;client_session&#xff0c;sig&#xff0c;sigTime&#xff0c;cursor 初步观察得出以下结论&#xff…

负债了,打死也别干的六件事!逾期了,六句谎言千万别信!

负债这事儿&#xff0c;真是一言难尽&#xff0c;稍不留神&#xff0c;就可能让情况雪上加霜。今儿咱们聊聊&#xff0c;负债后那几件打死也别干的几件事&#xff0c;尤其是针对还没有逾期的朋友们&#xff0c;免得后悔莫及。 首先&#xff0c;千万别动歪脑筋&#xff0c;拿公款…

深入剖析:GaussDB与MySQL在COUNT查询中的并行化技术

引言 数据库查询性能优化是数据库管理和开发中的一个重要议题。在处理大数据量的COUNT查询时&#xff0c;传统的单线程处理方式可能无法满足现代应用的性能需求。GaussDB(for MySQL)和MySQL作为流行的数据库系统&#xff0c;它们在并行查询优化方面有着各自的策略和技术。本文…

【C++】C++的类型的转换

目录 C语言中的类型转换 C中的类型转换 C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast C语言中的类型转换 C语言中又两种类型转换&#xff1a;&#xff08;强制&#xff09;显示类型转换和隐式类型转换。 &#xff08;强制&#xff09;显示类型…

多线程与并发思想

问题分析 设计并发程序的目的就是为了使程序运行得更快&#xff08;时间就是金钱、生命&#xff09;&#xff0c;提高软件的性能。并发程序之所以能快&#xff0c;就在于这个“并”字&#xff0c;因为程序能并发(单核)或并行(多核、多CPU)执行&#xff0c;当然能快。这就好比工…

修改linux服务器上的mariadb/mysql数据库的密码

文章目录 一、查看数据库的状态二、修改密码 可能我们在最初安装数据库时没有设置密码或者已经设置了但是又想修改另一个密码&#xff0c;可以这样操作来修改我们的密码。 以数据库 mariadb 为例。 一、查看数据库的状态 使用命令 systemctl is-active mariadb 查看当前数据库…

链表篇-02.从尾到头打印链表(反转链表)

解题思路&#xff1a; 链表从尾到头打印链表, 我的思路是 用三个指针,第一个指针(pre)指向指向头节点的前一个位置&#xff0c;第二个指针(cur)指向头节点&#xff0c; 然后依次往后执行&#xff0c;第三个指针用于临时记录第二个指针的下一个位置。 代码详情: import java.…

Linux云计算 |【第二阶段】AUTOMATION-DAY5

主要内容&#xff1a; YAML语法格式&#xff0c;层级关系、Ansible Playbook文件及语法格式、Ansible变量&#xff08;定义变量方法、优先级顺序、setup和debug查看变量&#xff09; 补充&#xff1a;Ansible ad-hoc 可以通过命令行形式远程管理其他主机&#xff0c;适合执行一…

python学习笔记——字符串

一、创建字符串 1.我们可以使用引号( 或 " )来创建字符串。创建字符串很简单&#xff0c;只要为变量分配一个值即可。 var1 Hello World! var2 "Runoob" 二、访问字符串中的值 1.Python 访问子字符串&#xff0c;可以使用方括号 [] 来截取字符串。…