继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
java继承分为:
单继承:一个子类最多只能有一个父类。
多继承:一个子类有两个以上的父类。一个接口可以继承多个类,一个类可以实现多个接口。
为什么说类是单继承的?
1、java的类只支持单继承,因为多继承会带来二义性。例如类D同时继承了B和C,类B和C中都有方法method( ),而且方法method是有方法体的,可以重写内容,那么A就不能确定到底该继承哪个类的d方法。
2、类是单继承、多实现的,也就是说一个子类只能有一个父亲,但一个父类可以有多个孩子。
写个例子
class A{
public void method()
{}
}
class B extends A{
@Override
public void method(){
System.out.println("bbb");
}
}
class C extends A{
@Override
public void method(){
System.out.println("ccc");
}
}
class E{
public void method(){}
}
class D extends B,C{
//类编译错误,这里在编写时就会报错
}
class F extends A,E{
//类编译错误,这里在编写时就会报错
}
接口为什么可以多继承
1、接口内都为抽象方法,没有方法体,所有子接口的继承并不影响该方法。具体的方法必须由实现接口的类去重写该方法,调用时会调用实现类的方法,不会出现歧义问题。
2、接口成员的特点:都是公共静态常量。成员变量只能是常量,默认public static final修饰;成员方法只能是抽象方法,默认public abstract修饰。
3、如果子接口继承的多个父接口中有相同的属性a,那么类在实现接口时是不能调用接口里面的属性a的,与类不能多继承原因一致,造成引用不明确。如果是不同的属性,实现类是可以调用的。
写个基础例子
interface A{
void method();
}
interface B extends A{
}
interface C extends A{
}
interface D extends B,C{
void method();
}
写个关于静态常量的例子
public interface A {
void method();
}
interface B extends A {
String a="你好";
public abstract void method();//public abstract可省略
}
interface C extends A {
String a="你不好";
}
public interface D extends B, C {
void method();
}
当我们去主函数中调D.a时会报引用不明确的错误
如果把C接口中的a换成b,再次调用则不会报错
interface C extends A {
String b="你不好";
}
标签:java,类单,继承,void,接口,public,extends,method
From: https://www.cnblogs.com/nliu/p/17554000.html