java某个类继承了多个类,编译时会

Python016

java某个类继承了多个类,编译时会,第1张

说明:这是一个新的系列,定下一个目标,只要不忙,每天都会进行一次更新

验证

public class ClassD {

ClassB b

public static void main(String[] args) {

System.out.println("xxx")

}

class ClassE {

ClassB b

}

}

class ClassF {

ClassB b

}

class ClassG {

ClassB b

}

abstract class ClassH {

ClassB b

}

interface ClassI {

}

上面的代码中一共有6个类,ClassD ClassE ClassF ClassG ClassH ClassI

ClassD 正常类

ClassE classD的内部类

ClassF 只是写在classD.java中的普通类

ClassG 只是写在classD.java中的普通类

ClassH 抽象类

ClassI 接口

编译之后,如图:

可以证明的是

如果再一个java文件中有多个类,除去内部类,剩下的每个普通类都会生成一个class文件

生成完的class文件:

public class ClassD {

ClassB b

public ClassD() {

}

public static void main(String[] args) {

System.out.println("xxx")

}

class ClassE {

ClassB b

ClassE() {

}

}

}

class ClassF {

ClassB b

ClassF() {

}

}

登录后复制

class ClassG {

ClassB b

ClassG() {

}

}

登录后复制

abstract class ClassH {

ClassB b

ClassH() {

}

}

登录后复制

interface ClassI {

}

登录后复制

总结

如果一个java文件中有多个类,除去内部类,剩下的每个普通类都会生成一个class文件

如上图:一个java文件中有6个类生成了5个class文件,因为其中有个类是内部类,如果都是外部类的话,则会生成6个class文件

/java只能单继承,希望同时继承多个类的话可以考虑implements.比如说:

class A extends B implements C, D

{

// ...  

} java不允许多继承,但允许implement 多个接口,事实上,接口也可以说是一个类,只不过,里面有很多没有实现的方法,需要你在子类中实现。

1,java 是不可以继承多个类,java是单继承的,但是java 通过 接口可以实现多继承

2,也就是说, 一个java类只能继承一个父类, 但可以有多个接口.

3,若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量。如:

public class classA // 父类 classA

{

private int num = 0

}

public class classB // 父类 classB

{

private int num = 1

}

public class classC extends classA,classB // 子类 classC 继承于 classA 和 classB

{

public static void main(String [] args)

{

classC obj = new classC()

obj.print() // 调用父类成员变量 num , 那 num 等于 0 还是 1 ?

}

public void print()

{

System.out.println(super.num)

}

}

2.若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。如:

public class classA // 父类 classA

{

public void fun()

{

System.out.print("hello")

}

}

public class classB // 父类 classB

{

public void fun()

{

System.out.print("hello")

}

}

public class classC extends classA,classB

{

public static void main(String [] args)

{

classC t = new classC()

t.print()

}

public void print()

{

super.fun()// 调用父类中 fun 方法,但由于classA、classB都有fun()方法,将无法确定使用

// 哪个父类中的方法

}

}

因此,Java仅允许单继承,即一个子类只能继承于一个父类。但为了拓展子类的功能,Java使用接口以克服不使用多继承带来的不足。

接口是一个特殊的抽象类,接口中成员变量均默认为 static final 类型,即常量,且接口中的方法都为抽象的,都没有方法体。

资料来源:http://blog.sina.com.cn/s/blog_6ed1419201013x47.html