当前位置:首页 » 编程语言 » java子类的子类

java子类的子类

发布时间: 2023-09-16 10:18:14

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

java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。

单继承:一个类只能有一个父类。

多继承:一个类可以有多个父类。

为什么不支持多继承呢?

因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体。

但是java支持多重继承。A继承BB继承CC继承D。

多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。

所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时,需要建立对象。建议建立最子类对象,因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。

简单说:对于一个继承体系的使用,查阅顶层父类中的内容,创建最底层子类的对象。

子父类出现后,类中的成员都有了哪些特点:

1:成员变量。

当子父类中出现一样的属性时,子类类型的对象,调用该属性,值是子类的属性值。

如果想要调用父类中的属性值,需要使用一个关键字:super

This:代表是本类类型的对象引用。

Super:代表是子类所属的父类中的内存空间引用。

注意:子父类中通常是不会出现同名成员变量的,因为父类中只要定义了,子类就不用在定义了,直接继承过来用就可以了。

❷ java 小问题 子类的子类是父类的子类还是间接子类

你应该这样去理解 “所有“ 的 Exception 类。


在 java 中 java.lang.Exception 是 java.lang.Throwable 的子类,而 java.lang.RuntimeException 也是 java.lang.Throwable 的子类。


因此,如果有一段代码,不管是会发生 Exception 还是 RuntimeException ,而你想一次性捕获所有错误的时候,这样写:


publicstaticvoidmain(String[]args){
System.out.println("----------测试输出1----------");
try{
Strings=null;
//注:这一个会抛出NullPointException,即RuntimeException的子类。
s=s.substring(0);
}catch(Throwableex){
ex.printStackTrace();
}
System.out.println("----------测试输出2----------");
try{
Strings="123";
//注:这一个会抛出IndexOutOfBoundsException,即RuntimeException的子类。
inti=s.indexOf(200);
}catch(Throwableex){
ex.printStackTrace();
}
System.out.println("----------测试输出3----------");
}


你在上面的代码里面可以看到,即使是发生了 RuntimeException ,但是使用了 Throwable 也可以捕获到,而且你不用关心具体是什么原因出错了,只要有错误,用 Throwable 都可捕获到。


如果不使用 Throwable ,又是一个什么情况呢,这个时候,你就需要在程序中针对某一个 Exception 或 RuntimeException 来写 catch 了:

publicstaticvoidmain(String[]args){
System.out.println("----------测试输出4----------");
try{
Strings=null;
//注:这一个会抛出NullPointException,即RuntimeException的子类。
s=s.substring(0);
}catch(NullPointExceptionex){
ex.printStackTrace();
}
System.out.println("----------测试输出5----------");
try{
Strings="123";
//注:这一个会抛出IndexOutOfBoundsException,即RuntimeException的子类。
inti=s.indexOf(200);
}catch(IndexOutOfBoundsExceptionex){
ex.printStackTrace();
}
System.out.println("----------测试输出6----------");
}


但是,其实所有 RuntimeException 及其子类都不需要在程序中显式调用的,如果不进行显式调用,则表明你不需要理会错误,当有任何错误发生时,让程序自动终止:


publicstaticvoidmain(String[]args){
System.out.println("----------测试输出7----------");

Strings=null;
//注:这一个会抛出NullPointException,即RuntimeException的子类。
s=s.substring(0);

System.out.println("----------测试输出8----------");

Strings="123";
//注:这一个会抛出IndexOutOfBoundsException,即RuntimeException的子类。
inti=s.indexOf(200);

System.out.println("----------测试输出9----------");}


这个时候,在上面代码中,因为没有进行 catch ,所以,第 2 句 “测试输出 8” 就不会执行到了。

❸ Java面试题,常见面试题及答案汇总

Java最新面试题附赠答案

Q1: Java内部类和子类之间有什么区别?

答案:内部类是指在一个外部类的内部再定义一个类,内部类对外部类有访问权限,可以访问类中定义的所有变量和方法。子类是从父类(superclass)中继承的类,子类可以访问父类所有public和protected的字段和方法。

Q2: 静态方法和静态变量的目的是什么?

答案:静态变量被类的所有实例共用,静态类只能访问类的静态变量,或调用类的静态方法。

Q3: Java语言中有哪些常见的访问说明符,有什么意义?

答案:Java中的访问说明符是放在类名之前,用于定义访问范围的关键字,常见的访问说明符有以下几类:

Public:公共,能被项目中的任何一个Class、Method、Field访问。

Protected:受保护,能被同类或子类访问,不能从外部访问。

Default:默认,只能被同一个包的ClassMethod、Field访问。

Private:私有,只能被本类访问。

Q4: 什么是数据封装及其意义?

答案:封装是面向对象编程中用于在单个单元中组合属性和方法。封装可以帮助程序员遵循模块化方法进行软件开发,每个对象都有自己的一组方法和变量,并且可以独立干其他对象来执行其功能。另外,封装也有数据隐藏的目的。

Q5: 什么是 singleton class(单例类)? 并给出其用法的实际例子。

答案:单例类只能有一个实例,必须自己创建自己的唯一实例,必须给所有其他对象提供这一实例。单例做差枯使用场景的最佳实践是由于某些驱动程序限制,或由于许可问题的限制只能连接数据库

Q6: 什么是循环? Java中有哪些循环?

答案:循环用于编程中重复执行语句,Java中的循环有三类:

1、for循环

for循环用于执行指定重复次数的语句,当程序员明确知道循环次数可以使用for循环。

2、While循环

当语句满足条件时开始进行重复执行,直到语句不再满足条件退出循环。While循环中在执行语句之前先检查是否满足条件。

3、do while循环

Do while 和while循环基本类似,唯一不同的是do while是先执行语句再检查条件,也就是说dowhile循环至少会执行一次语句。

Q7: 什么是无限循环? 如何声明无限循环?

答案:无限循环是指无条件执行,无限运行。无限循环可以由定义中断语句块来结束。

Q8: Java中的double和float变量有什么区别?

答案: float是单精度浮点数,内存中占用4字节double是双精庆册度浮点数,内存中占用8字节。

Q9: Java中的Final关键字是什么意思纯洞? 请举例说明。

答案: final是Java中的关键字,有“无法改变”、“终态”的含义,final类不能被继承,没有子类,final类中的方法默认是final的,且不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。final不能用于修饰构造方法。下面的例子中,const_val被声明且赋值为常量100:Private Final int const_val=100而当一个方法被声明为final之后,它不能被子类覆盖,而且会比其他方法都快。

Q10: 举例说明什么是三元运算符?

答案:三元运算符,也称为条件运算符,根据布尔值来决定将哪个值分配给变量,它被表示为...? ...:...

在下面的示例中,如果rank为1,status=Done,否则status=Pending。

Q11: 什么是Java Packages? 其意义是什么?

答案:为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用:

1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

❹ Java中怎样获取一个类的所有子类

1、面向对象思想的继承是子类继承父类,父类被其它子类继承在JAVA虚拟机的容器中并没有直接接口获取;

2、如果是在一个项目内获取父类的子类继承情况,参考这个代码:

packagefind;

importjava.io.File;
importjava.io.IOException;
importjava.net.URL;
importjava.util.ArrayList;
importjava.util.List;

importfind.test.Intf;
importfind.test.Man;

publicclassClassUtil{
publicstaticvoidmain(String[]args){
try{
System.out.println("接口实现类:");
for(Class<?>c:getAllAssignedClass(Intf.class)){
System.out.println(c.getName());
}
System.out.println("子类:");
for(Class<?>c:getAllAssignedClass(Man.class)){
System.out.println(c.getName());
}
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}

/**
*获取同一路径下所有子类或接口实现类
*
*@paramintf
*@return
*@throwsIOException
*@throwsClassNotFoundException
*/
publicstaticList<Class<?>>getAllAssignedClass(Class<?>cls)throwsIOException,
ClassNotFoundException{
List<Class<?>>classes=newArrayList<Class<?>>();
for(Class<?>c:getClasses(cls)){
if(cls.isAssignableFrom(c)&&!cls.equals(c)){
classes.add(c);
}
}
returnclasses;
}

/**
*取得当前类路径下的所有类
*
*@paramcls
*@return
*@throwsIOException
*@throwsClassNotFoundException
*/
publicstaticList<Class<?>>getClasses(Class<?>cls)throwsIOException,
ClassNotFoundException{
Stringpk=cls.getPackage().getName();
Stringpath=pk.replace('.','/');
ClassLoaderclassloader=Thread.currentThread().getContextClassLoader();
URLurl=classloader.getResource(path);
returngetClasses(newFile(url.getFile()),pk);
}

/**
*迭代查找类
*
*@paramdir
*@parampk
*@return
*@throwsClassNotFoundException
*/
privatestaticList<Class<?>>getClasses(Filedir,Stringpk)throwsClassNotFoundException{
List<Class<?>>classes=newArrayList<Class<?>>();
if(!dir.exists()){
returnclasses;
}
for(Filef:dir.listFiles()){
if(f.isDirectory()){
classes.addAll(getClasses(f,pk+"."+f.getName()));
}
Stringname=f.getName();
if(name.endsWith(".class")){
classes.add(Class.forName(pk+"."+name.substring(0,name.length()-6)));
}
}
returnclasses;
}
}
热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:431
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:556
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:743
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:536
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:144
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:232
java驼峰 发布:2025-02-02 09:13:26 浏览:649
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:530
linuxadobe 发布:2025-02-02 09:09:43 浏览:211
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:725