java 父类与多子类 java父类和子类的关系_开发语言

Java中只支持单继承,即一个父类可以有多个子类,一个子类只有一个父类。子类继承父类不能改变父类成员的访问属性。类继承具有传递性。

域的隐藏:

public class A {
    int x=3;
    public void m(){
        x++;
        System.out.println("the x of A is"+x);
    }
}
class B extends A{
    double x=20.67;
    public void n(){
        x--;
        System.out.println("the x of B is"+x);
    }
    public void usehide(){
        System.out.println("the x of superclass is"+(--super.x));
    }

    public static void main(String[] args) {
        B b=new B();
        b.n();  //the x of B is19.67
        b.usehide();    //the x of superclass is2
        b.m();  //the x of A is3
    }
}

子类B中拥有两个同名的域x,并且在方法m(父类)和方法n(子类)中都对x进行了处理,m 和n并不是对同一个x进行处理,虽然这两个成员变量名相同,但代表两个完全不同的数据。当执行从父类继承的方法时,方法内处理继承自父类的变量,当子类执行由自己定义的方法时,处理的是自己定义的成员变量,而将父类中同名的域隐藏起来。若子类想访问父类被隐藏的域,前缀用super关键字加圆点操作符。

方法的覆盖:

子类中的方法覆盖父类中的方法,相同的方法名,相同的方法返回类型,相同的参数表(参数的个数,顺序和类型必须完全相同)。子类的方法将替换掉父类中同名的方法,将清除父类方法占的内存(这与变量的隐藏不一样,隐藏不会清除父类的域),这使父类的方法在子类中不再存在。

抽象类:

抽象类为子类提供一个实现框架,本身却不实现具体的实例。用abstract关键字修饰。只能作为其他类的超类。抽象类中可以不提供抽象方法,但是拥有抽象方法的类必须被声明为抽象类。

抽象方法:

只有方法头,没有方法体,方法的实现细节留给子类实现。抽象方法必须在抽象类中定义,不能用abstract关键字来修饰构造方法,static和private不能与abstract组合使用,final不能跟abstract组合使用。

接口(解决多重继承问题):

接口中定义的所有方法是抽象方法,并且接口中定义的所有域都是常量。接口本身不提供方法的实现,可以使用类来实现接口中的抽象方法。

[public] interface Name [extends superinterface1,...,superinterfacen]

包(package):是一组相关类和接口的集合。