
java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。
单继承:一个类只能有一个父类。
多继承:一个类可以有多个父类。
为什么不支持多继承呢
因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢因为父类中的方法中存在方法体。
但是java支持多重继承。A继承BB继承CC继承D。
多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。
所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时,需要建立对象。建议建立最子类对象,因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。
简单说:对于一个继承体系的使用,查阅顶层父类中的内容,创建最底层子类的对象。
子父类出现后,类中的成员都有了哪些特点:
1:成员变量。
当子父类中出现一样的属性时,子类类型的对象,调用该属性,值是子类的属性值。
如果想要调用父类中的属性值,需要使用一个关键字:super
This:代表是本类类型的对象引用。
Super:代表是子类所属的父类中的内存空间引用。
注意:子父类中通常是不会出现同名成员变量的,因为父类中只要定义了,子类就不用在定义了,直接继承过来用就可以了。
在父类中能获取子类的属性吗?一般情况下是不行的,因为孩子尚未出世哪里来的属性。但有时需要在父类处理该类(包含子类)的所有属性,该怎么做呢,有种方法能解决——在父类中将子类的实例引用进来。假设BaseClass是基类,有个getAll方法用以获取该类的所有属性。SubClass继承子BaseClass,SSClass继承自SubClass,SSClass的实例调用getAll方法时获取SSClass及其父类的所有属性。具体做法如下:
import javalangreflectField;
public class BaseClass {
private String a;
private int b;
// public BaseClass() {
// bc = setBC();
// }
private final BaseClass bc = setBC();
private BaseClass setBC() {
return this;
}
public void getAll() {
Class clazz = thisbcgetClass();
do {
Field[] fields = clazzgetDeclaredFields();
for (Field f : fields) {
Systemoutprintln(fgetName());
}
clazz = clazzgetSuperclass();
} while (clazz != Objectclass);
}
}
这里BaseClass bc就是子类的引用,构造子类SubClass或SSClass实例时,调用setBC方法将子类的引用获得。setBC中return this这里的this是子类的实例,不是父类的。setBC也可以在父类构造函数中调用,效果是一样的,如上面代码的注释块。
子类就不用关心任何事了,不管它是否有自己的构造方法:
public class SubClass extends BaseClass {
@ShareObject
private boolean c;
}
public class SSClass extends SubClass {
private String ss;
public SSClass(int i) {
ss = "";
}
}
测试:
@Test public void get() {
SSClass sc = new SSClass(1);
scgetAll();
}
输出内容:
ss
c
a
b
bc
继承后子类包含了父类的方法,直接调用就行了,不包括私有成员。
即getChild()不是私有成员,所以直接getChild()就可以
java中父类如何得到子类的对象:
Parent
test3=new
Child();
以上就是关于JAVA的单继承中允许一个父类有多个子类吗全部的内容,包括:JAVA的单继承中允许一个父类有多个子类吗、Java 子类继承父类,子类重写父类方法,这种情况下父类可以获取到子类的数据吗、java中父类如何得到子类的对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)