JAVA的单继承中允许一个父类有多个子类吗

JAVA的单继承中允许一个父类有多个子类吗,第1张

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中父类如何得到子类的对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9748330.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存