精华内容
下载资源
问答
  • 2021-03-01 06:34:01

    publicabstractclassA {

    inti=1;

    publicvoidprintI() {

    System.out.println("i="+i);

    }

    }

    publicclassB  extneds A{

    inti=2;

    publicstaticvoidmain(String[] args) {

    B b=newB();

    b.printI();

    }

    }

    那么,控制台打出来的i的值是多少?

    呵呵,如果一下功夫就能说出正确结果1,那么,下面部分就不需要往下看了。

    1、类的继承知识点

    (1)java不支持多重继承,也就是说子类至多只能有一个父类

    (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法

    (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承

    (4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。

    2、答案是2者如是说

    子类B中的变量i和父类A中的变量i重名, 那么子类B中的变量i将会覆盖掉父类中的同名变量i. 则访问父类中的变量时jvm会把子类cast到父类.所以,打印出的结果应该是“i=2”;

    3、歧义的产生

    歧义的产生最关键的地方是子类B中的变量i将会覆盖掉父类中的同名变量i的覆盖两个字。这里,我觉得这两个字容易误导。应该改为屏蔽或隐藏。因为在这里父类的成员变量是没有被改变。

    4、jvm的执行过程

    (1)子类B 的构造方法被调用,实例化一个B对象,B对象的成员被初始化

    (2)jvm隐含的调用父类的构造方法,实例化一个A对象,A对象的成员被初始化。

    (3)由于A对象的printI()未被屏蔽,所以调用的A对象的printI()函数。

    那么,在这里A的成员函数当然是访问自己的成员变量了。

    5、super关键字

    super关键字在java中的作用是使被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。super是用在子类中,目的是访问直接父类中被屏蔽的成员。上面的代码也可以这样写:

    Java代码

    publicabstractclassA {

    inti=1;

    publicvoidprintI() {

    System.out.println("i="+i);

    }

    }

    publicclassBextendsA{

    publicinti=2;

    publicvoidprintI(){

    super.printI();

    }

    publicstaticvoidmain(String[] args){

    B b=newB();

    b.printI();

    }

    }

    注:

    JVM实例化程序的过程中,若对子类进行实例化,必然要对父类的构造器进行实例化继承。

    C exteds D{}

    C c = new C();

    构造器,采取先父后子的关系。

    而方法,若调用的方法为子类所覆盖,则主动调用儿子的方法,因为此时,已经继承了父类所拥有的

    相关变量,而方法行为,子类具有相对来说的独立性,可以独立调用。

    D c = new C();

    JV处理过程,也是如此。

    先继承D的构造器(基因),再加载C独自的构造器,同时,对相关方法进行相应的调用。

    更多相关内容
  • 如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。 子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。 class Father(object): def __init__(self, ...
  • 主要给大家详细介绍了python中子类如何继承父类的__init__方法,文中给出了详细的示例代码,相信对大家的理解和学习具有一定参考价值,有需要的朋友们下面来跟着小编一起学习学习吧。
  • 主要介绍了java子类继承父类实例-披萨的选择实现代码,具有一定借鉴价值,需要的朋友可以参考下。
  • 概念二 python3 中子类继承父类

    千次阅读 2022-03-07 15:59:20
    1.python 子类继承父类 lass Person: def __init__(self, name = "person"): self.name = name class Puple(Person): # sub class1 pass class Puple_Init(Person): # sub class2 def __init__(self, age): #...

    python 中子类继承父类的三种情况;

    1. 子类中的初始化函数

    python中类的初始化都是def __init__()
    所以父类和子类的初始化方式都是__init__()

    1. 但是如果子类初始化时没有这个函数,那么它便调用父类的__init__()
    1. 如果子类实现了def __init__这个函数,就会覆盖父类的初始化函数。
    1. 如果继承父类的__init__(),就需要在子类中显示调用这个函数。

    所以,当子类中

    1. 既需要在自己的初始化函数中, 增加或者重写自己的部分属性;重写自己的属性,
    2. 又需要保留父类中的属性时;

    这情况时, 子类在定义自己的初始化函数时def __init__(self, ), 便会结合super(sub_class, self) 一起使用;

    实现如下:

    class Animal(object):
         def __init__(self):
             self.name = " I am a  father class"
    
    
    class Panda(Animal):
        def  __init__(self):   // 重写父类中的属性
            super(Panda, self).__init__()  //继承父类中的属性;
    
    
    
    if __name__ == "__main__":
       panda = Panda()
       print(panda.name)
    
    
    

    2.子类继承父类的三种情况

    1. 类的初始化函数 def __init__()

    2. 子类继承父类的属性与方法 super(sub_className, self).__init__ 的使用

    class Person:
        def __init__(self, name = "person"):
            self.name = name
    
    
    class  Puple(Person):   #  sub class1
         pass
    
    class Puple_Init(Person):   # sub class2
        def  __init__(self, age):    #  覆盖父类中的__init__ 方法, 丢失父类中self. name 属性;
            self.age = age
    
    class Puple_Super(Person):       # sub class3
        def __init__(self, name, age):    #   重载父类中 __init__ 方法,
            self.age = age
           # super(Puple_Super, self).__init__()  # 并继承父类中self.name 属性, 没有传入 name 时, 保留父类中的 name;
            super(Puple_Super, self).__init__(name)  #  传入name 时, 更新为 当前子类中 name;
    
    if __name__ == "__main__":
        pp  = Puple()
    
        pp_i = Puple_Init(10)
        pp_s = Puple_Super("puple_super", 13)
    
        print(pp_s.name,  pp_s.age)
    

    2.1 子类继承父类的三种情况

    1.子类1 中,没有初始化函数__init__(),那么它便调用父类的__init__()

    1. 子类2中, 实现了def __init__这个函数,就会覆盖父类的初始化函数__init__,没有使用super(sub_class, self) 丢失父类中self. name 属性;。
    1. 子类3中,重写def __init__(self) 函数, 用来增加了子类自身的属性,并且有使用super(sub_class, self) 保留父类中self. name 属性;
    展开全文
  • 子类可以继承父类的什么

    千次阅读 2021-03-05 22:47:45
    展开全部子类可以获得除private权限以外的所有父类属性,但是:1、在子类继承62616964757a686964616fe58685e5aeb931333431343130父类的时候,子类必须调用父类的构造函数。2、如果父类有默认构造函数,子类实例化时...

    展开全部

    子类可以获得除private权限以外的所有父类属性,但是:

    1、在子类继承62616964757a686964616fe58685e5aeb931333431343130父类的时候,子类必须调用父类的构造函数。

    2、如果父类有默认构造函数,子类实例化时自动调用,但如果父类没有默认构造函数,即无形参构造函数,子类构造函数必须通过super调用父类的构造函数。

    3、还有在java的继承当中子类是不可以继承父类的构造函数只能调用,这是肯定的。

    c10799dc3e1e0e3f1e5a92c6ec467481.png

    扩展资料:

    1、子类拥有父类得特征,而父类没有,父类更通用,子类更具体,(特征包括属性和方法,自身的特性,拥有父类没有的)。

    2、使用extends继承父类,语句格式:class 子类名 extends 父类名。

    3、父类中一般只定义一般属性和方法(这个一般可以理解为是子类共有的,这就是父类更通用,而子类拥有其他的,所以子类更具体)。

    4、子类中通过super关键字来调用父构造方法。

    5、在子类中可以继承父类得那些东西,哪些不可以继承父类中public,protected修饰的属性,方法可以继承,private修饰的属性和方法不能被继承。

    6、规则: 创建子类对象的时候,首先调用的是父类的无参构造方法创建一个父类对象

    7、可以在子类中显示调用父类的有参构造方法。

    8、如果父类的属性均为private修饰,则可以通过共有的getter,setter方法来调用。

    有些编程语言支持多重继承,即一个子类别可以同时有多个父类别,比如C++编程语言;而在有些编程语言中,一个子类别只能继承自一个父类别,比如Java编程语言,这时可以利用接口来实现与多重继承相似的效果。

    现今面向对象程式设计技巧中,继承并非以继承类别的“行为”为主,而是继承类别的“型态”,使得元件的型态一致。另外在设计模式中提到一个守则,“多用合成,少用继承”,此守则也是用来处理继承无法在执行期动态扩充行为的遗憾。

    参考资料来源:百度百科-继承

    展开全文
  • 子类通过继承父类的属性的行为,我们称之为继承。Java只支持单继承,不支持多继承。因为多继承容易带来安全隐患:当多个父类定义相同的功能,当功能内容不同的时候,子类对象不确定要运行哪一个,在Java中用另一种...

    概念

    继承就像是我们现实生活中的父子关系,儿子可以遗传父亲的一些特性,在面向对象语言中,就是一个类可以继承另一个类的一些特性,从而可以代码重用,其实继承体现的是is-a关系,父类同子类在本质上还是一类实体;子类通过继承父类的属性的行为,我们称之为继承。Java只支持单继承,不支持多继承。因为多继承容易带来安全隐患:当多个父类定义相同的功能,当功能内容不同的时候,子类对象不确定要运行哪一个,在Java中用另一种形式体现出来,就是接口的多实现。

    子类能否继承父类私有属性或方法?

    为验证这个问题,我们接着往下看

    观点一

    Java官方文档的解释(标准):

    A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.

    详细链接:https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

    意思是说:子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。

    观点二

    其他人的理解:

    父类的任何成员变量都是会被子类继承下去的。子类继承父类,子类拥有了父类的所有属性和方法。父类的私有属性和方法子类是无法直接访问的。当然私有属性可以通过public修饰的get和set方法访问到的,但是私有方法不行。父类的private属性,会被继承并且初始化在子类父对象中,只不过对外不可见。

    详解:分析内存后,会发现,当一个子类被实例化的时候,默认会先调用父类的构造方法对父类进行初始化,即在内存中创建一个父类对象,然后再父类对象的外部放上子类独有的属性,两者合起来成为一个子类的对象。

    所以:子类继承了父类的所有属性和方法或子类拥有父类的所有属性和方法是对的,只不过父类的私有属性和方法,子类是无法直接访到的。即只是拥有,但是无法使用。 (这里不考虑Java反射机制)

    辨析

    从继承的概念来说privatefinal不被继承。Java官方文档上是这么说的。

    从内存的角度来说,父类的一切都被继承(从父类构造方法被调用就知道了,因为new一个对象,就会调用构造方法,子类被new的时候就会调用父类的构造方法,所以从内存的角度来说,子类拥有一个完整的父类)。子类对象所引用的内存有父类变量的一份拷贝。

    如图所示,父类为Person类,子类为Student类。首先明确子类不能继承父类的构造方法。这就是为什么子类的默认的构造方法会自动调用父类的默认的构造方法。在子类的构造方法中通过super()方法调用父类的构造方法。也就是,在构造子类的同时,为子类构造出跟父类相同的域。如此就在子类的对象中,也拥有了父类声明的域了。

    在这里插入图片描述
    如果一个子类继承了父类,那么这个子类拥有父类所有的成员属性和方法,即使是父类里有private属性的变量,子类也是继承的,只不过不能使用,也就是说,它继承了,但是没有使用权,似乎又点矛盾,用我们通俗的说法就是 只能看,不能用,虽然是这样,但是,我们还是可以通过setget的方法来间接的访问父类中的private属性的变量。

    关于成员变量的继承,父类的任何成员变量都是会被子类继承下去的,这些继承下来的私有成员虽对子类来说不可见,但子类仍然可以用父类的函数操作他们。

    这样的设计的意义就是我们可以用这个方法将我们的成员保护得更好,让子类的设计者也只能通过父类指定的方法修改父类的私有成员,这样将能把类保护得更好,这对一个完整的继承体系是尤为可贵的。

    注意点

    成员变量和方法

    • 子类只能继承父类的所有非私有的成员变量和方法。可以继承public protected 修饰的成员,不可以继承private修饰的。

    • 但是可以通过父类中提供的publicsettergetter方法进行间接的访问和操作private的属性

    • 对于子类可以继承父类中的成员变量和成员方法,如果子类中出现了和父类同名的成员变量和成员方法时,父类成员变量会被隐藏,父类的成员方法会被覆盖。需要使用父类的成员变量和方法时,就需要使用super关键字来进行引用

    • 当创建一个子类对象时,不仅会为该类的实例变量分配内存,也会为它从父类继承得到的所有实例变量分配内存,即使子类定义了与父类中同名的实例变量。 即依然会为父类中定义的、被隐藏的变量分配内存。

    • 如果子类中的实例变量被私有了,其父类中的同名实例变量没有被私有,那么子类对象就无法直接调用该变量,但可以通过先将对象变量强制向上转型为父类型,在通过该对象引用变量来访问那个实例变量,就会得到的是父类中的那个实例变量。

    构造器

    • 子类不能继承获得父类的构造方法,但是可以通过super关键字来访问父类构造方法。

    • 在一个构造器中调用另一个重载构造器使用this调用完成,在子类构造器中调用父类构造器使用super调用来完成。

    • super 和 this 的调用都必须是在第一句,否则会产生编译错误,this和super只能存在一个

    • 不能进行递归构造器调用,即多个构造器之间互相循环调用。

    总结

    最后关于Java中子类能否继承父类的私有变量和方法?当然是以 Java 官方文档解释说明为准,这里我们明确一下“继承”一词的概念,在 Java 中,继承一词的意义是有限制的。一个子类只能继承其父类可访问的成员,并且该子类没有覆盖或者说隐藏父类中的那些可访问成员。所以,一个类的成员就是指在这个类中所声明的属性和方法,再加上从其父类继承而来的属性和方法。也就是说,子类是不能继承父类的私有成员的。

    虽然子类不继承父类中的私有成员,但是在父类中的这些私有成员仍然是子类对象的一部分。因为在实例化对象的时候,只初始化在当前类中所声明的属性明显是不足够的,还需要初始化其父类中所有声明的属性。在实例化的过程中,JVM 需要为对象的类及其父类中所有定义的属性分配空间,包括父类中声明的私有成员。

    所以,我们可以说:子类不能从父类继承私有成员,但是子类的对象是包括子类所不能从父类中继承的私有成员的


    关注我,每天分享实战经验。

    展开全文
  • Java子类继承父类详解

    千次阅读 2021-02-12 11:46:34
    别和我说你真的懂了继承,先来看下面的代码,回答出我的问题再说代码很简单,如下:父类:public class T {public void run(){System.out.println("T can run");}public static void main(String args[]){T t = new ...
  • css不继承父类的属性有:display、width、height、margin 、border、float、clear、position、top、right、bottom、left、background、content、size等等。本教程操作环境:windows7系统、CSS3&&HTML5版、...
  • 子类继承父类时会继承什么

    千次阅读 2020-11-17 22:24:48
    1.首先,我们都知道子类继承父类继承父类的非private属性和方法。 2.接下来我有个疑问,父类继承了一个祖父类,子类再继承父类,子类继承祖父类吗? 先说答案,是的,子类也会继承祖父类 //祖父类 public class ...
  • //继承:子类继承父类通过extends关键字,使得子类对象具有与父类对象相同的行为 //子类可以直接访问父类中的非私有的行为 //提高代码的复用性 3.测试代码 二.接口实现: 1.接口 //作用:如果说类的内部封装了成员...
  • 子类能否继承父类的私有属性?

    千次阅读 2021-08-30 20:04:10
    子类能否继承父类的私有属性? 参考: https://blog.csdn.net/ql_7256/article/details/107428016 https://www.zhihu.com/question/61922420 Java官方文档的解释:子类不能继承父类的私有属性,但是如果子类中公有的...
  • 子类继承父类

    2021-04-17 23:14:31
    // 所有的类都会有一个顶级的父类,object // private仅支持本类 // protected可在父子类之间调用 private String hobby; public Father() { System.out.println("父亲被创建了"); } public void smoke()...
  • 一、Reference ...二、继承父类方法和属性的4种方法 2.1 直接继承不加改变 此时,由于不会覆盖父类的属性和方法,所以不用调用父类来进一步继承。 class Father(): def __init__(self): self.a
  • 父类:public class Subjects {public void b() {...}public void a(){System.out.println("这是继承父类的方法:Subjects");}public void c() {System.out.println("这是父类的数学");}public void d() {System.o...
  • java中,子类是不继承父类的构造函数的(父类的private成员会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取)。例子如下:public class FatherClass {public FatherClass() {System.out.println(100)...
  • 和C++类似,可以继承基类的公共属性和方法...子类继承父类的成员变量当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:1)能够继承父类的public和prote...
  • 子类实例化对象时,会先调用父类的构造方法,如果子类的构造方法没有显式的调用父类的构造方法,默认调用super(); 子类要使用父类有参的构造方法,使用super(参数)形式,且super()必须是子类构造方法中的第一行语句...
  • WPF继承_子类继承父类,实现跨类调用方法
  • 子类继承父类 private

    2021-03-22 10:35:34
    我们知道一个类A通过extends继承另一个类B,我们就说A类是B类的子类子类可以继承父类的属性/方法/属性值但是父类的被private修饰的属性/属性值是父类所私有的,不能被继承的但是如果你继承的方法中有用到这个私有化的...
  • 父类humanBeing , 子类student, 实例对象 $m (注意:$m是子类student 的实例,和humanBeijing没有直接关系)2.private 的属性.仅在本类里使用;任何子类、实例对象都无法访问,更别说赋值。这个在书本上都一直是这么....
  • java中子类可以继承父类的私有属性

    千次阅读 2022-03-19 18:17:05
    Java中子类可以继承父类的私有属性
  • css 高度继承父类_CSS继承

    千次阅读 2020-08-29 06:01:39
    css 高度继承父类When you set some properties on a selector in CSS, they are inherited by all the children of that selector. 在CSS中的选择器上设置某些属性时,该属性将由该选择器的所有子级继承。 I ...
  • python 类与继承
  • JAVA子类继承父类时的构造方法

    千次阅读 2021-12-03 16:52:22
    如果父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句中进行调用。 此时再创建子类实例就需要显示的调用父类的...
  • Dog继承Animalclass Animal{protected String name;protected String description;protected String say() {return "一只动物";}}class Dog extends Animal{private String name;protected String say() {return "我...
  • 子类能不能继承父类的构造函数

    千次阅读 2021-04-09 09:59:56
    一、子类能继承父类的构造函数? 答案是不能的。构造函数是创建对象时完成的初始化,当我们在new一个对象并传入参数时,会自动调用有参数的构造完成参数的初始化,也就是属性的初始化。试想子类中继承父类的构造...
  • super用来继承父类方法和参数。继承就是子类继承父类的特征和行为,使得子类具有父类相同的行为。注意事项:1、当一个类没有继承任何一个类时,系统默认继承Object。2、父类又被称为基类、超类、super类,子类又被...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 689,618
精华内容 275,847
关键字:

如何继承父类