java的继承与多态

继承条件下的构造方法调用:
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.");
   }
}
 
class Child extends Parent
{
    public Child()
  {
        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关键字来访问它。
  如果子类被当作父类使用,则通过子类访问的字段是父类的!
  牢记:在实际开发中,要避免在子类中定义与父类同名的字段。不要自找麻烦!
 
posted @ 2020-10-23 21:34  IQcarry  阅读(128)  评论(0)    收藏  举报