首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java的加载机制---和子类的多态调用

null 1) 上面程序最大的难点,也是最重要的地方就是:在的构造函数调用了虚函数,并且这个函数被子类重载了 2) 继承的时候,子类与有着同名的属性和同名的方法,关于同名的属性的初始化过程也是必须要了解的...上面的程序就很容易理解为什么输出null了 Java机制里面有这样的一个原则就是:如果存在,子类可以不存在;如果子类存在,必须存在; 怎么理解上面的这句话呢,可以用实际的例子来说明,一个人结婚了但是没有小孩...,对应着前半句的意思;如果他生了小孩,那么这个小孩子一定有父亲的 到Java代码这样看,如果我们实例化一个子类,必须先构造这个子类的,否则是错误的。...Java加载的机制第二个需要理解的地方就是: 1)加载机制首先是  分配内存空间(堆空间,物理存储地址,每个属性都需要分配物理空间,【方法不需要的】,且这个时候物理空间指向的空null); 2...Java 中子类加载的机制第三个需要理解的地方: 1)相关的的加载机制还是跟  上面第二点相似,只是在子类初始化的时候必须先去初始化 2)只有 等Java机制给子类和所有的都分配了内存空间之后

2.7K40
您找到你想要的搜索结果了吗?
是的
没有找到

Java】基础21:顶层Object

在东方神话体系,人类如何来的? 女娲用泥土捏出来的。 在西方神话体系,人类如何来的? 亚当夏娃的后代。 今天要学的ObjectJava里面,就好比和亚当夏娃一样的存在。...②getSuperClass():得到名。 ③Classjava.lang这是Java里面的一个包,Object。 所以数组的也就是Object.。...如果一个没有特别指定,那么默认继承自Object。 既然Object顶层,那么按照继承的规则:子类可以调用的方法。 Object的方法,所有都可以使用。...②在测试main方法,创建对应的person对象并初始化。 ③调用toString()方法并打印(注意:Person并没有定义toString()方法,它调用的Object的方法)。...引用数据类型,所以Object的equals()方法,比较的引用地址是否相同。 那么问题又来了,String的equals方法为何比较的值是否相等呢?

73120

java引用指向子类对象好处_java子类调用类属性

,为了规避风险,Java只允许单继承,势必在功能上有很大的限制,所以,Java引入多态性的概念以弥补这点不足,此外,抽象和接口也是解决单继承规定限制的重要手段.同时,多态也是面向对象编程的精髓所在....子类覆盖实现多态: 如果子类继承的超一个抽象,虽然抽象不能通过new操作符实例化,但是可以创建抽象的对象引用指向子类对象,以实现运行时多态性,不过,抽象的子类必须覆盖实现超的所有的抽象方法...所以,类型的引用可以调用定义的所有属性和方法,而对于子类定义而没有的方法,它是无可奈何的; 对于定义的方法,如果子类重写了该方法,那么类型的引用将会调用子类的这个方法,这就是动态连接...重载后的func1(int i)和func1()不再同一个方法,由于没有func1(int i),那么,类型的引用child就不能调用func1(int i)方法。...Father f1 = (Father)s;//这时f1会指向那1.5M内存的1M内存 即是说,f1只指向了s实例的实例对象,所以f1只能调用的方法(存储在1M内存),而不能调用子类的方法

1.2K20

java加载的过程 _加载机制原理

2、元数据验证 第二阶段对字节码描述的信息进行语义分析,以保证其描述的信息符合Java语言规范的要求,这个阶段可能包括的验证点如下: 这个是否有(除了 java.lang.0bject之外,所有的都应当有...保证跳转指令不会跳转到方法体以外的字节码指令上 保证方法体的类型转换有效的, 例如可以把一个子类对象赋值给数据装型,这是安全的,但是把对象意赋值给子类数据类型,甚至把对象赋值给与它毫无继承关系...到了初始化阶段, 才真正开始执行定义的 Java程序代码。从代码角度,初始化阶段执行构造器()方法的过程。...()方法的肯定是 java,lang.Object 由于的()方法先执行,也就意味着定义的静态语句块要优先于子类的变量赋值操作 ()方法对于或接口来说并不是必须的...但接口与不同的, 执行接口的()方法不需要先执行接口的()方法。只有当接口中定义的变量被使用时, 接口才会被初始化。

67720

继承与隐藏:Java成员变量的神秘禁忌

摘要 在Java,子类继承了的成员变量,但不能直接覆盖(或称为隐藏)的成员变量。...引言 Java作为一门面向对象的编程语言,支持继承和多态等特性,允许子类继承的属性和行为。然而,与成员方法不同,Java成员变量在子类不能被覆盖。...本文将探讨这个设计决策的原因,以及如何在子类中正确使用的成员变量。 2. 成员变量的继承和隐藏 在Java,继承一种允许子类获取类属性和方法的机制。...多态与方法重写 多态面向对象编程的一个重要概念,它允许一个对象表现出多种形态。在Java,多态通过方法重写来实现。...4.1 保护继承的一致性 Java的设计者认为,直接覆盖的成员变量可能会导致继承关系的混乱和不一致性。子类通常被视为的扩展,它们应该增加功能而不是完全改变继承的属性。

34720

子类继承,的初始化

当然,基础子对象应该正确地初始化,而且只有一种方法能保证这一点:在构建器执行初始化,通过调用基础构建器,后者有足够的能力和权限来执行对基础的初始化。...在衍生的构建器Java 会自动插入对基础构建器的调用。...除此以外,在衍生构建器,对基础构建器的调用是必须做的第一件事情(如操作失当,编译器会向我们指出)。...个人总结: super关键字必须写在构造方法的方法体内的非注释代码的首行 子类进行初始化,必须调用的构造方法,如果的所有构造方法都用private修饰了的话,则无法继承,编译报错....衍生构造方法调用的构造方法,如果无参构造方法,那么编译器会为衍生的构造方法首行加上super()。 编译器会强迫我们在衍生构建器的主体首先设置对基础构建器的调用。

1.8K30

java面对对象(.2)(多态性,终极,instanceof,包装等)

多态性,面向对象中最重要的概念,在Java的体现: 对象的多态性:的引用指向子类的对象 可以直接应用在抽象和接口上 Java引用变量有两个类型:编译时类型和运行时类型。...若编译时类型和运行时类型不一致,就出现了对象的多态性(Polymorphism) 多态情况下, “看左边”:看的的引用(不具备子类特有的方法) “看右边”:看的子类的对象(...实际运行的子类重写的方法) 对象的多态 —在Java,子类的对象可以替代父的对象使用 一个变量只能有一种确定的数据类型 一个引用类型变量可能指向 ( 引用 ) 多种不同类型的对象...,所以类型的引用可以指向子类的对象:向 上转型 (upcasting) 一个引用类型变量如果声明为的类型,但实际引用的子类 对象,那么该变量就不能再访问子类添加的属性和方法...——Java程序中所有的直接或间接库中所有,处在层次最高点 包含了所有Java的公共属性,其构造方法Object( )  到这里我们随便讲下== 和equals以及还有终极中方法

38130

【Python】面向对象 - 继承 ② ( 子类重写成员 | 子类调用重名成员 | 子类中使用 名 调用成员 | 子类中使用 super 调用成员 )

; 成员属性 重写 , 就是在 子类 , 修改 成员属性的值 ; 成员方法 重写 , 就是在 子类 , 修改 成员方法的方法体内容 ; 在子类 , 如果需要重写的成员 , 直接在子类 ,...重新定义父的成员即可 ; 在 Python , 不像 Java / Kotlin / Groovy 一样 , 如果子类重写成员 , 需要使用 @Override 注解 修饰 ; 2、代码示例...- 子类重写成员 在 Animal , 定义了 成员属性 name 和 age , 成员方法 make_sound 函数 ; 在子类 Dog , 对 Animal 的 成员属性 name...1、子类调用重名成员语法 在 外部 无法访问 成员 : 子类 重写 成员后 , 通过 子类 实例对象 调用 该 重写后的 成员时 , 默认调用的就是 重写后的成员 ; 在 子类内部 可以...) 2、代码示例 - 子类中使用 名 调用成员 在 Dog 子类的 make_sound 函数 , 通过 Animal.name 和 Animal.age 可以调用的成员变量 , 打印出来的值为的成员变量值

40930

Java中子类和的构造函数?

参考链接: Java的继承和构造函数 这篇文章总结了关于Java构造的常见​​问题。  1)为什么创建一个子类对象要也需要调用的构造函数? ...,构造对象时,的构造函数(super())首先被调用。...让的构造器被调用的原因,如果有私有的属性需要在它的构造函数初始化。 ...在Java,如果一个没有定义构造函数,编译器会为默认创建一个无参构造函数。如果在定义了构造函数super(String s),在这种情况下,编译器将不会为创建一个无参构造函数。...3)子类的显式调用构造函数  下面的代码正常的:    子类(Sub)构造函数显式地调用(Super)的带参构造参数。如果定义了相对应的构造函数,那将会被正常良好的调用。

2.1K20

关于java关系的小坑

学过JavaSE的都知道java在初始化的时候,如果存在直接先初始化,然后才初始化子类。      ...子类拥有所有的非私有化成员,非私有的成员不仅仅包括public修饰的成员,protected修饰的(protected修饰的可以访问其他包中子),不写访问修饰符默认default修饰(只能访问同一个包...由的加载机制可以得知,的加载包括 加载,验证,准备,解析,初始化这几个阶段。 其中:静态变量初始化在虚拟机的方法区初始化的,的实例变量会在实例化时跟随的实例在堆内存初始化。...准备阶段正式为变量分配内存并设置变量初始值的阶段。...还未执行任何java方法,而给静态变量赋值实例初始化之后,存放于构造器的。

1.4K10

索引和索引

由于java语言不允许多重继承,所以索引只有一个。...索引为0x0004,去常量池里找索引为4的描述符,描述符的索引为18,再去常量池里找索引为18的字符串,就是“java/lang/Object”。...接口索引集合 接口索引集合(interface)一组u2型的数据的集合,由于java语言允许实现多个接口,所以接口索引也有多个,它们按照implements语句后的接口顺序从左到右依次排列在接口索引集合...全限定名全名的“.”替换成“/”就可以了,比如java.lang.Object的全限定名就是“java/lang/Object”。...字段表集合不会列出从父或者接口中继承而来的字段,但有可能列出原版Java代码没有的字段,比如在内部类为了保持对外部类的访问性,会自动添加指向外部类实例的字段。

78700

LuceneAttributeSource作为TokenStream的原因

设计这两个映射关系的目的在该AttributeSource实例对每个Attribute和AttributeImpl保证只有一个AttributeImpl实例,换句话说,当用具体Attribute或者具体...= null); } } /* 海军蓝部分将该att实现的每个Attribute接口与att之间的映射关系添加到Map; //*/ // add all interfaces...LuceneAttributeSource作为TokenStream的原因的 2.1 TokenStream的作用是从给入的文本不断解析出Token,具体的做法TokenStream有方法incrementToken...,每次调用将产生待分析文本的下一个Token,其实incrementToken做的事情就是填充我所关心的若干属性,通过这些属性来反馈分析结果,因此自然而然的一种想法TokenStream的派生中有若干的属性成员...,这样没有必要的,也就是说对相同的属性在流层次只有一个实例就可以满足分析的需求了。

52810
领券