当前位置: 首页 > wzjs >正文

南宁有做门户网站的公司吗百度文库首页官网

南宁有做门户网站的公司吗,百度文库首页官网,金华市建设监理协会网站,建瓯市建设局网站继承 Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。 public class Student extends Person {}继承关系: Student称为子类(派生类)Person称为父类(基类/超类&#…

继承

  • Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。

    public class Student extends Person {}
    
  • 继承关系:
    • Student称为子类(派生类)
    • Person称为父类(基类/超类)

使用继承的好处

  1. 提高代码复用性 把多个子类中重复的代码抽取到父类中 (如:StudentTeacher共有的name/age属性)
  2. 增强扩展性 子类可以在父类基础上新增功能 (如:Student类添加studentIdTeacher类添加teacherId

继承的特点

  1. 单继承限制
    Java 只支持单继承(一个子类只能有一个直接父类),不支持多继承(c++)。

  2. 多层继承支持

    • 允许链式继承:子类 A (直接继承)→ 父类 B (间接继承)→ 父类 C
    • 最终所有类都直接或间接继承自 Object
  3. Object 类地位
    所有 Java 类的默认根父类(显式或隐式继承)

    public class A {  // 默认继承Object类
    // 类内容...
    }
    
  4. 子类只能直接访问父类中非私有的成员

    若父类提供 public/protectedgetset 方法,子类可调用这些方法间接操作私有变量。

继承的内容

类型非私有权限(public/protected/默认)private权限
构造方法不能继承(需通过super()调用)不能继承且无法调用
成员变量能继承并直接访问继承但不可直接访问(使用父类非私有的get/set)
成员方法能继承并直接调用不能继承且不可访问

继承的内存图

在这里插入图片描述

当加载子类时,JVM会递归加载其父类链Object类,父类元数据(字段/方法定义)完整存储于方法区后,再加载子类。(先加载父类,再加载子类)

  • 子类不能继承父类的构造方法,但是可以通过super调用

  • 子类构造方法的第一行,有一个默认的super() ; (不写也存在,虚拟机会自动加上)

  • 默认先访问父类中无参的构造方法,再执行自己。

  • 如果想要方法文父类有参构造,必须手动书写。

super(name,age)//需要在父类加上这个有参构造

子类对象在堆中是单一内存块,按继承层级合并存储父类与子类属性。成员访问时,JVM优先从子类作用域查找,未找到则向上追溯父类。

| Fu.name | Fu.age | Zi.game |  // 父类属性在前,子类新增在后

虚方法表

在这里插入图片描述

  • 虚方法表属于类级别,存储在方法区(元数据区),所有同类对象共享同一虚方法表。
虚方法表的构建方法

1.父类虚方法表为基础

  • 父类的虚方法表包含所有可继承方法(非private/static/final)的入口地址。
  • 示例:父类Animal的虚方法表:
索引方法名地址
0eat()0x1000
1sleep()0x2000

2.子类虚方法表构建步骤

  • 步骤1:复制父类表:子类虚方法表初始化为父类表的完整拷贝。
  • 步骤2:替换重写方法:若子类重写父类方法,替换对应索引位置的地址
重写
  • 1.重写方法的名称、形参列表必须与父类中的一致
  • 子类重写父类方法时,访问权限子类必须大于等于父类(暂时了解:空着不写<protected<public)
  • 3.子类重写父类方法时,返回值类型子类必须小于等于父类(即子类方法的返回值类型可以是父类方法返回值类型的子类,并不是基本数据类型中的大小关系**)
  • 4.建议:重写的方法尽量和父类保持一致。
  • 5.只有被添加到虚方法表中的方法才能被重写在这里插入图片描述
  • 步骤3:追加新方法:子类新增的虚方法追加到表末尾
  • 示例:子类Dog的虚方法表:
索引方法名地址说明
0eat()0x3000⬅️ 重写父类Animal.eat()
1sleep()0x2000⬅️ 继承父类Animal.sleep()
2bark()0x4000⬆️ 子类新增虚方法

多态

什么是多态?

对象的多种形态

多态的前提?

  • 有继承/实现关系
  • 有父类引入指向子类对象
  • 有方法的重写

多态的好处?

使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利。

多态的内存图

在这里插入图片描述

在这里插入图片描述

核心结论

变量访问:静态绑定(编译期决定引用类型,偏移量由 JVM 在类加载阶段确定)

Animal a = new Dog();
a.name → 永远访问父类变量(Animal.name="动物"
  • 规则编译看左边,运行也看左边

  • 本质:编译器根据引用类型(Animal、Dog……)生成对“字段偏移量”(field offset)的访问指令;该偏移量并非在 javac 编译期硬编码,而是由 JVM 在类加载/链接‑准备阶段 根据继承链顺序、对象头大小与对齐策略动态计算并记录的。根据这个偏移量来访问这个对象(Dog)中对应引用类型(Animal)中的变量

    • 子类可访问继承链中所有非private变量(受访问修饰符限制,如 default 仅限同包)

    • 但变量名冲突时优先访问最近父类的版本(如图中name变量的覆盖现象)

    • 若需访问子类自身字段,可通过 instanceof + 强制类型转换:

    Animal a = new Dog();
    if (a instanceof Dog) {Dog d = (Dog)a;    // 改变引用类型d.name;            // 访问子类层变量
    

方法调用:动态绑定(运行期决定)

a.show() → 执行子类重写方法(Dog.show()
  • 规则编译看左边(检查语法),运行看右边(实际对象)
  • 本质:通过对象头的类型指针虚方法表(由于都是new Dog(),所以访问的都是访问在方法区中dog.class的虚方法表)动态路由

如果同时使用两个包中的同名类,需要用全类名

com.itheima.domain1.Teacher t = new com.itheima.domain1.Teacher();
com.itheima.domain2.Teacher t2 = newcom.itheima.domain2.Teacher();

final

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

http://www.dtcms.com/wzjs/798822.html

相关文章:

  • 宝安网站制作哪家强wordpress视频没图像
  • 网站开发与维护专业要学什么北京app建设 网站开发公司
  • 电商网站建设目的及网站的优势网站建站上市公司
  • 衡阳网站排名优化费用深圳中心网站建设
  • 做网站备案实名需要钱吗开发公司招标流程及管理制度
  • 公司建设网站需要多少钱wordpress 3.3.1 漏洞
  • 做网站的过程什么网站做推广
  • 应用asp做网站网站设计个人心得
  • 个人建立网站后怎么盈利网址链接怎么做出来的
  • 专业做生鲜的网站好星座 网站 建设
  • 濮阳做网站做的好的公司网页制作是建网站的第几步
  • 杭州制作网页与网站深圳外贸网站定制
  • 想建个图片网站亚马逊aws永久免费服务器
  • 怎么让搜索引擎收录网站中国新闻社是国企还是央企
  • 设置网站关键词怎么做移动互联网开发工程师证书
  • 自己做的网站提示不安全金蝶进销存软件免费版
  • 青岛 生物类网站建设wordpress选了中文还是英文
  • 驻马店哪家做网站好收录网站的二级域名
  • 重庆今天刚刚发生的新闻wordpress 国内 优化
  • 给孩子做衣服的网站网站建设的经费
  • 即墨做砍价小程序最好的网站泰安房价网二手房出售信息
  • 哈尔滨企业建站模板珠海制作网站
  • asp网站伪静态教程庆阳北京网站建设
  • 企业网站推广优化小程序制作问卷调查
  • winscp怎么做网站个人做房产网站
  • 猪八戒网做网站国内餐饮类网站欣赏
  • 个性化建网站定制微网站特点
  • 做润滑油网站图片合肥小程序开发
  • 聊城市 网站制作讲究 网站
  • 新网站怎么做谷歌推广呢国内设计网站公司