java继承问题

我不明白为何结果是这样的 继承要怎么看
2024-11-24 11:40:00
推荐回答(5个)
回答1:

3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

回答2:

和C++类似,可以继承基类的公共属性和方法。
在Java继承里,父类的属性还有方法在声明时,如果是public关键字即公共属性,则在子类继承时,这些属性和方法都会被子类继承。受保护的也可以继承
但是私有的类属性成员和方法则无法继承。
.子类继承父类的成员变量
当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:
1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;
2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。
2.子类继承父类的方法
同样地,子类也并不是完全继承父类的所有方法。
1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。

回答3:

看一下这两个图,更容易帮助你理解继承

回答4:

我看了一下前几楼的答案,都没有讲到关键的地方,这里涉及到的不仅仅是继承方面的知识,还有类型转换和重写重载。
要理解图中出现的结果,你要知道以下几点:
1、子类是可以自动转换成父类类型的
2、调用重载方法优先匹配参数类型,当没有参数类型匹配时,会进行自动类型转换再匹配,如果还匹配不到,则报错
3、子类重写父类方法时,调用的是子类中的方法
我逐句代码解释下:
a1.show(b):A类中并没有以B类型作为参数的方法,则会自动将B类转换成B类的父类A类,调用的是show(A obj),输出A and A
a1.show(c):同上,只是会进行两次类型转换,输出A and A
a1.show(d):A类中有以D类型作为参数的方法,直接调用,输出A and D
a2.show(b):A类中并没有以B类型作为参数的方法,则会自动将B类转换成B类的父类A类,但是这里要注意,a2的类型虽然是A类型,但是它是以子类B类为模板创建的,并且B类中对show(A obj)进行了重写,因此调用的是B类中的show(A obj),输出B and A
a2.show(c):同上,会进行两次类型转换,输出B and A
a2.show(d):A类中有以D类型作为参数的方法,直接调用,输出A and D
b.show(b):B类中有以B类型作为参数的方法,直接调用,输出B and B
b.show(c):B类中并没有以C类型作为参数的方法,则会自动将C类转换成C类的父类B类,调用的是show(B obj),输出B and B
b.show(d):B类中并没有以D类型作为参数的方法,但是B类的父类A类中有,所以调用的是A类中的show(D obj),输出A and D

回答5:

A and A 是a1.show(b)打印出来的。