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):是一组相关类和接口的集合。