l 类的继承
·继承使用extends关键字。跟创建一个类一样,只是多了”extends 父类名字” 关键字。可以把extends按原意翻译就是扩展,子类除了继承父类的“方法”与“属性”还可以自己扩展自己的特性。
·父类也被称为基类或超类。
·语法:
修饰符 class 子类名 extends 父类名字
{
//类中的语句
}
继承(extends)特点:子类继承父类的“属性”与“方法”(包括可以继承static方法但是子类不能重写static方法,所以static方法不具备多态性)但是不继承父类的“构造器”。如果子类中的属性或方法与父类中的一样则子类覆盖父类的属性或方法。如果子类中的方法或属性与父类中方法或属性一样,那么调用父类方法或属性就需要使用super关键字。
java是单继承的只有一个直接父类,也能有多个间接父类。所有类不写所属父类的他们的父类都是java.lang.Object类。
·继承中子类属性的数量
在继承中,子类初始化对象时候,属性数量在内存中存数量是:子类属性数量+继承父类属性的数量=子类中对象存储的总属性数量
·子类覆写(重写)父类方法
子类继承父类,继承了父类的属性和方法,唯独不继承构造器。当在子类中定义一个与父类中一模一样的方法时(方法名相同,形参列表相同),这时子类的方法就会覆盖父类的方法,就是重写父类方法。如果父类方法是private那子类就不继承这个方法了。
·子类中有与父类同名的属性,则子类的属性隐藏父类的属性(是隐藏从继承过来的属性,就是说继承过来的属性在子类中只是使用的时候使用的是子类的属性,除非显示的使用super,才调用子类继承过来的属性)如果子类中没有与父类同名的属性,那么在类中访问这个从父类继承过来的属性时,可以不用使用super关键字来调用。如果某个方法中访问名为a的属性,但没有显示的指定调用者,则系统查找a属性的顺序为:
(1)在该方法中查找是否有a的局部变量
(2)在当前类中查找
(3)在a属性的直接父类中是否有包含名为a的属性,依次查找a的所有父类,直到java.lang.Object类。
例子:子类继承父类
public class Fruit
{
public double weight;
public void info()
{
System.out.println(weight);
}
}
public class Apple extends Fruit
{
public static void main(String[] args)
{
Apple a = new Applea();
a.weight = 10;
a.info();
}
}
例子:子类重写父类方法
//父类
public class Bird
{
public void fly()
{
System.out.println("wo zai fei");
}
}
//子类
public class Ostrich extends Bird
{
public void fly() //这里子类重写了父类中的方法,结果显而易见。如果将这个方法注释掉那么在子类中用Ostrich对象调用fly方法就会出现“wo hui fei”
{
System.out.println("wo hui pao");
super.fly(); //调用子类继承过来的方法
}
public static void main(String[] args)
{
Ostrich os = new Ostrich();
os.fly(); //子类重写了父类中的方法,这里调用的是子类自己的方法。
}
}