java的继承与多态
继承条件下的构造方法调用:
class Grandparent
{
class Grandparent
{
public Grandparent()
{
{
System.out.println("GrandParent Created.");
}
}
public Grandparent(String string)
{
{
System.out.println("GrandParent Created.String:" + string);
}
}
}
class Parent extends Grandparent
{
{
public Parent()
{
{
//super("Hello.Grandparent.");
System.out.println("Parent Created");
// super("Hello.Grandparent.");
// super("Hello.Grandparent.");
}
}
class Child extends Parent
{
{
public Child()
{
System.out.println("Child Created");
{
System.out.println("Child Created");
}
}
public class TestInherits
{
{
public static void main(String args[])
{
{
Child c = new Child();
}
}
}
分析上述示例代码,可得出结论:通过super调用基类构造方法,必须是子类构造方法中的第一个语句。
方法覆盖(override)的要点:
方法覆盖要求子类与父类方法一模一样,否则就是方法重载(overload)!
在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。
java“方法覆盖”的语法规则
1.覆盖方法的允许访问范围不能小于原方法。
2.覆盖方法所抛出的异常不能比原方法更多。
3.声明为final方法不允许覆盖。
4.不能覆盖静态方法。
多态:
1.当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,
由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的
,它就调用父类型的方法。
这个特性实际上就是面向对象“多态”特性的具体表现。
2.如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的
是子类中的字段(而不是父类的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用
super关键字来访问它。
如果子类被当作父类使用,则通过子类访问的字段是父类的!
牢记:在实际开发中,要避免在子类中定义与父类同名的字段。不要自找麻烦!

浙公网安备 33010602011771号