一、子类可以继承父类的private属性和private方法:
1、子类继承父类,子类拥有了父类的所有属性和方法。
程序验证,父类的私有属性和方法子类是无法直接访问的。当然私有属性可以通过public修饰的getter和setter方法访问到的,但是私有方法不行。
假设:子类不能够继承父类的私有属性和方法
那么:分析内存后,会发现,当一个子类被实例化的时候,默认会先调用父类的构造方法对父类进行初始化,即在内存中创建一个父类对象,然后再父类对象的外部放上子类独有的属性,两者合起来成为一个子类的对象。
所以:子类继承了父类的所有属性和方法或子类拥有父类的所有属性和方法是对的,只不过父类的私有属性和方法,子类是无法直接访到的。
即只是拥有,但是无法使用。
2、如果一个子类继承了父类,那么这个子类拥有父类所有的成员属性和方法,即使是父类里有private属性的变量,子类也是继承的,只不过不能使用,也就是说,它继承了,但是没有使用权,似乎又点矛盾,用我们通俗的说法就是 只能看,不能用,虽然是这样,但是,我们还是可以通过set 和get的方法来间接的访问父类中的private属性的变量 。
二、子类不可以继承父类的static变量和static方法:
1、无论是static修饰的变量,还是static修饰的方法,我们都知道他们是属于类本身的,不是属于某一个对象的,当声明一个对象时,并不产生static变量和方法的拷贝。也就是说,用static修饰的变量和方法在类加载的时候,只分配一块存储空间,所有此类的对象都可以操控此块存储空间;
注:这里要说明的是,当子类没有与之同名的static变量(或方法时),子类的对象也可以操控这块内存空间。但是子类并没有继承父类中static修饰的变量和方法。因为static修饰的变量和方法是属于父类本身的。
2、当存在继承关系时,父类中有一个static修饰的变量(或方法),而子类中也存在一个同名的static修饰的变量(或方法)时,他们到底是否满足“重写”,而最终体现出多态的效果呢??
对于静态方法在子类中是不存在“重写”这一说的,就像前面我们提到的,用static关键字修饰的方法和变量都是属于类自己本身的,即使存在继承关系,子类并没有继承父类的static修饰的变量和方法,所以说即使子类和父类中都有同样的static方法和变量,他们是没有任何关系的,他们是相互独立的,他们是属于各自类本身的。因此也是不存在多态特性的。而对于普通方法的调用是存在“重写”而最终呈现出多态特性的。
同样的道理:对于static修饰的变量,当子类与父类中存在相同的static变量时,也是根据“静态引用”而不是根据“动态引用”来调用相应的变量的。
3、java中 子类会不会继承父类的static变量和static方法?
先说static方法:子类会不会继承父类的static方法呢??答案是:不会的,但是是可以访问的。
接着来看父类的static修饰的变量,是否能够被子类继承呢??
答案:是不可以的。但是也是可以被子类访问的。
小结:
1)类是不继承父类的static变量和方法的。因为这是属于类本身的。但是子类是可以访问的。。
2)类中同名的static变量和方法都是相互独立的,并不存在任何的重写的关系。的关系。
本文详细解析了Java中子类继承父类的私有属性和方法的情况,解释了虽然子类继承了父类的所有属性和方法,但私有属性和方法无法直接访问。同时探讨了子类不会继承父类的静态变量和方法,但可以访问它们。
3万+

被折叠的 条评论
为什么被折叠?



