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

【JAVA面向对象编程】--- 探索子类如何继承父类

注意事项: 1.当调用含参的构造方法时系统就不会自动调用无参构造方法 2.对象属性的初始化一定得调用构造方法的 3.子类构造方法:当我们构造Dog时要先调用它的构造方法---> (1).先帮助父类初始化...用户没有写时,编译器会自动添加,而且super()必须是子类构造方法的第一句, 并且只能出现一次。...总结: 在子类构造方法中,并没有写任何关于基类构造的代码,但是在构造子类对象(穿件对象)时,先执行基类(父类)的构造方法,然后执行子类的构造方法, 因为: **子类对象中成员是有两部分组成的...注意: 1,若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super(调用,即调用基类构造方法 2.如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用...3.在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。4.super(...)只能在子类构造方法中出现一次,并且不能和this同时出现

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

    创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法?

    void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建A对象的时候父类会调用子类方法...但是:创建B对象父类会调用父类的方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...如果,子类重写了父类的方法,子类的方法引用会指向子类的方法,否则子类的方法引用会指向父类的方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建时,会先行调用父类的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。

    6.2K10

    一日一技:如何禁止 Python 子类覆盖父类方法?

    在昨天的文章里面,我们讲到了,当子类试图覆盖父类的时候,可以通过类型标注来发出警告。今天,我们来讲讲如何直接禁止覆盖。...Python 原生是没有提供禁止子类覆盖父类的方法的功能,因此我们需要自己来实现。 先来看一下实现效果: 在这段代码里面,我们禁止子类覆盖父类的dead()和eat()方法,但不禁止move方法。...所以,当我们在子类Dog里面尝试覆盖父类中的dead()时,程序就报错了。...Protect类有一个__new__方法,这个方法会在使用了元类的所有子类的__init__之前被调用。...当实现我们自己的父类Animal的时候,由于meta.has_base为 False,所以不会触发检查逻辑。

    1.5K40

    python之子类继承父类时进行初始化的一些问题

    __init__相当于是python类的构造方法,在类进行实例化时被调用,当子类和父类中都存在构造方法时,子类中需要显示调用父类的构造方法 。...需要注意的是python中构造方法是不能进行重载的,当有多个构造方法存在时,会默认调用最后一个构造方法。...加上了私有的属性和方法不能在类外进行访问,同时,子类继承父类的属性和方法时,在子类中也不能够访问父类的私有属性和方法。...print("在子类中使用父类的共有属性:",self.age) #super()代表父类,可以访问父类的公有方法 #当然如若子类没有重写父类的方法,也可以使用self.test...那么假设父类的构造器带有参数,那么在子类中应该如何进行初始化呢?

    63550

    06 Java 的继承

    如何使用一个继承体系中的功能 查阅父类功能(定义了共性的功能) 创建子类对象使用功能(因为父类可能不能创建对象, 而且子类提供了更丰富的功能) 继承中自子类变量的特点:如果子类出现非私有的同名变量时,...覆盖的应用 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样也沿袭了父类的功能 构造方法在类继承中的作用 构造方法不能继承.由于子类对象要对来自父类的成员进行初始化,因此...,在创建子类对象时除了执行子类的构造方法外,还需要调用父类的构造方法.具体遵循如下原则: 当子类未定义构造方法时,创建对象时将无条件地调用父类的空构造方法,会默认在第一条添加super(); 对于父类的含参数构造方法...子类可以重写父类非private的方法,当调用的时候,会动态绑定,执行子类的方法。...❑ 可见性重写; 重写方法时,一般并不会修改方法的可见性。但我们还是要说明一点,重写时,子类方法不能降低父类方法的可见性。 为什么要这样规定呢?

    54420

    C++【继承】

    ;当子类成员可访问父类成员时,最终权限将会变为 访问权限与继承权限 中的较小者 两种不同的权限相遇时,若可见,则在子类中变为较小者 如何证明?...,当子类中的方法出现 隐藏 行为时,优先执行 子类 中的方法;当子类中的成员出现 隐藏 行为时,优先选择当前作用域中的成员(局部优先) 这已经证明了 父子类中的作用域是独立存在的 如何显式的使用父类的方法或成员...在继承中,允许将 子类 对象直接赋值给 父类,但不允许 父类 对象赋值给 子类 这其实很好理解,儿子以后可以当父亲,父亲还可以当儿子吗?...;如果不存在,会报错 5.2、显式调用 因为存在 隐藏 的现象,当父子类中的函数重名时,子类无法再自动调用父类的默认成员函数,此时会引发 浅拷贝 相关问题 class Person { public:...这对于编译器来说,是一件无法处理的事 8.2、现象 将上述概念转化为代码,观察实际现象 注:多继承时,只需要在 父类 之后,添加 , 号,继续增加想要继承的父类 class Person { public

    15410

    java 语言【继承和多态】

    子类继承父类之后,必须要新添加自己特有的成员,体现出与基类的不同,否则就没有必要继承了 1.4 父类成员访问 在继承体系中,子类将父类中的方法和字段继承下来了,那在子类中能否直接访问父类中继承下来的成员呢...通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用 方法适传递的参数选择合适的方法访问,如果没有则报错; 问题:如果子类中存在与父类中相同的成员时,那如何在子类中访问父类相同名称的成员呢...1.5 super关键字 由于设计不好,或者因场景需要,子类和父类中可能会存在相同名称的成员,如果要在子类方法中访问父类同名成 员时,该如何操作?...那父类中不同访问权限的成员,在子类中的可见性又是什么样子的呢?...2.2 多态实现条件 在java中要实现多态,必须要满足如下几个条件,缺一不可: 必须在继承体系下 子类必须要对父类中方法进行重写 通过父类的引用调用重写的方法 多态体现:在代码运行时,当传递不同类对象时

    9210

    Java 小白成长记 · 第 6 篇「为什么说要慎用继承,优先使用组合」

    另外,一定要注意的是:「在覆盖一个方法的时候,子类方法不能低于父类方法的可见性」。特别是, 如果超类方法是 public, 子类方法一定要声明为 public。...其实也不难理解: 如果一个子类拥有多个父类的话,那么当多个父类中有重复的属性或者方法时,子类的调用结果就会含糊不清,也就是存在「二义性」。因此 Java 使用了单继承。...按照上面子类重写的逻辑,每向集合中添加一个元素,addCount 就会相应的增加一个。...addAll 方法向集合中添加了 3 个元素,按理来说,addCount 应该是 3。...也就是说,按照上面子类重写的逻辑,子类在调用自己的 addAll() 方法时,首先 addCount 会加 3,然后调用父类的 addAll() 方法,父类的 addAll() 又会调用子类的 add(

    98920

    Java基础(八):封装、继承、多态性

    这就是封装性的设计思想 Java如何实现数据封装 实现封装就是控制类或成员的可见性范围 这就需要依赖访问控制修饰符,也称为权限修饰符来控制 权限修饰符:public、protected、缺省、private...不过,通常我们都习惯省略this 但是,当形参与成员变量同名时,如果在方法内或构造器内需要使用成员变量,必须添加this来表明该变量是类的成员变量 即:我们可以用this来区分成员变量和局部变量 比如:...而实例变量和实例方法就是事物的特征,那么父类中声明的实例变量和实例方法代表子类事物也有这个特征 当子类对象被创建时,在堆中给对象申请内存时,就要看子类和父类都声明了什么实例变量,这些实例变量都要分配内存...当子类对象调用方法时,编译器会先在子类模板中看该类是否有这个方法,如果没找到,会看它的父类甚至父类的父类是否声明了这个方法,遵循从下往上找的顺序,找到了就停止,一直到根父类都没有找到,就会报编译错误...super的理解 super可用于访问父类中定义的属性 super可用于调用父类中定义的成员方法 super可用于在子类构造器中调用父类的构造器 注意: 当子父类出现同名成员时,可以用super表明调用的是父类中的成员

    10610

    【Java】多态&综合案例

    代码如下: 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执 行的是子类重写 后方法。...1.4 引用类型转换 多态的转型分为向上转型与向下转型两种: 向上转型 向上转型 :多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。...当父类引用指向一个子类对象时,便是向上转型。 使用格式: 向下转型 向下转型 :父类类型向子类类型向下转换的过程,这个过程是强制的。...一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向 下转型。...使用格式: 为什么要转型 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说, 不能调用 子类拥 有,而父类没有的方法。

    53710

    JDK1.9-多态

    ; 变量名.方法名(); 父类类型:指子类对象继承的父类类型,或者实现的父接口类型。...代码如下: Fu f = new Zi(); f.method(); 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法。...2.4 引用类型转换 多态的转型分为向上转型与向下转型两种: 向上转型 向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。 当父类引用指向一个子类对象时,便是向上转型。...使用格式: 父类类型 变量名 = new 子类类型(); 如:Animal a = new Cat(); 向下转型 父类类型向子类类型向下转换的过程,这个过程是强制的。...使用格式: 子类类型 变量名 = (子类类型) 父类变量名; 如 :Cat c =(Cat) a; 为什么要转型 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。

    41330

    (16) 继承的细节

    但对于public变量和方法,则要看如何访问它,在类内访问的是当前类的,但子类可以通过super.明确指定访问父类的。...可见性重写 重写方法时,一般并不会修改方法的可见性。...但我们还是要说明一点,重写时,子类方法不能降低父类方法的可见性,不能降低是指,父类如果是public,则子类也必须是public,父类如果是protected,子类可以是protected,也可以是public...,即子类可以升级父类方法的可见性但不能降低。...继承反映的是"is-a"的关系,即子类对象也属于父类,子类必须支持父类所有对外的行为,将可见性降低就会减少子类对外的行为,从而破坏"is-a"的关系,但子类可以增加父类的行为,所以提升可见性是没有问题的

    69890

    【c++】继承学习(一):继承机制与基类派生类转换

    它是继承关系中处于较低层次的类,可以继承其一或多个父类的属性和方法。子类通常会添加一些特有的属性和方法,或者重写某些从父类继承的方法来改变行为。子类集成了父类的特征,并可以拥有自己的特征。...这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它 我们前面知道,类里面可以访问它的成员,但是private继承下,子类是无法访问父类的成员的...Person pobj = sobj; Person* pp = &sobj; Person& rp = sobj; 每一个子类对象都是一个特殊的父类对象 当派生类对象被赋值给基类对象时会发生。...使用引用和指针时不会发生切片 对象切片的问题仅在派生类对象被赋值给另一个基类类型的对象时才会发生,比如当派生类对象被传值给一个基类对象的函数参数,或者通过赋值构造一个新的基类对象。...子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义。

    37910

    java基础-2

    子类对象 Parent p = new Child(); 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。...private  在同一类内 可见,不能修饰类 protected 对同一包内的类和所有子类可见  不能修饰类 public 对所有类可见 构造方法  成员变量初始化   静态成员变量 三者初始化顺序...先后顺序: 静态成员变量,成员变量,构造方法 详细先后顺序: 父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块...,不能有方法的实现,而抽象类可以有方法的定义与实现 实现接口的关键字 implements   继承抽象类的关键词 extends  ,一个类可以实现多个接口,只能继承一个抽象类 子类和父类之间存在逻辑上的层次结构...,推荐使用抽象类,有利于功能的累积,,当功能不需要,希望支持差别较大的两个或更多对象间的特定交互行为,推荐使用接口。

    32640
    领券