继承

修饰符 class SubClass extends SuperClass

{

 

    //类定义部分

 

}

 

每个类最多只能有一个直接父类

class SubClass extends Base

 可以有无限个间接类

 

 

重写父类的方法:

如 鸵鸟不会飞

public class Bird

{

 

//Bird 类的fly方法

public void fly()

{

  System.out.println("我在天空自由地翱翔");

 

}

 

 

}

 

 

public Ostrich extends Bird

{

 

  //重写Bird的fly方法

public void fly()

{

System.out.println("我只能在地上奔跑");

 

}

 

}

 

方法的重写要遵循“两同两小一大”规则,“两同”即方法名同、型参同,“两小“指的是子类方法返回值类型应该比父类返回类型更小或相等,子类方法声明抛出的异常类应比父类方法抛出的异常类更小或相等。“一大“指的子类方法的访问权限应该比父类方法更大或相等,尤其要指出的是覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个方法类方法,一个是实例方法。

    当子类覆盖了父类方法后,子类的对象将无法访问父类中被覆盖的方法,但可以在子类方法中调用父类中覆盖的方法。如需要在子类方法中调用父类中被覆盖的方法,可以用super(被覆盖的是实例方法)或者父类类名(被覆盖方法是类方法)作为调用者来调用父类中被覆盖方法。

      如果父类方法具有private访问权限,则该方法对其子类是隐藏的,子类无法访问和重写。如果子类中定义了一个与父类private方法通明,同参数,同返回类型的方法依然不是重写,只是在子类中重新定义一个新方法。

 

父类实例得super引用

   如果需要在子类方法中调用父类被覆盖的方法,可以使用super作为调用者来调用父类被覆盖的实例方法。

public void callOverrideMethod()

{

//在子类方法中通过super显式调用父类被覆盖的方法

super.fly();

 

    }

 

java创建某个类的对象时,系统会隐式创建该父类的对象。只要有一个子类的对象存在,则一定存在一个与之对应的父类对象。在子类方法中使用super饮用,super总是指向作为该方法调用者的子类对象所对应的父类对象。this总是指向到调用该方法的对象,而super则指向this指向对象的父对象。

 

  this不能出现在static修饰的方法中,super不能出现在static的方法中。static 修饰的方法属于类,该方法的调用可能是类,而不能使对象。

 

    方法重载overload,方法重写override,重载主要发生在同一个累得多个同名方法之间,而重写发生在子类和父类的同名方法之间

    如果子类定义了和父类同名的属性,也会发生子类属性覆盖父类属性,可以通过super来访问父类被覆盖的属性。

调用父类构造器

   子类不获得父类的构造器,当有的时候子类构造器需要调用父类构造器的初始化代码,在子类构造器中调用父类构造器使用super来调用。

public Base

{

 

public double size;

public String  name;

public Base(double size,String name)

{

 

this.size=size;

this.name=name;

 

}

 

 

public class Sub extends Base

{

public String color;

public Sub(double size,String name,String color)

{

//通过super调用父类构造器的初始化过程

super(size,name);

this.color=color;

}

 

public static  void main(String[] args)

{

Sub s =new Sub(5.8,"ddd","red");

System.out.println(s.size+"-----"+s.name+"------"+s.color);

}}

使用super调用父类的构造器必须出现在子类构造器执行体的第一行。

不管是否使用super调用雷执行父类的构造器得初始化,子类构造器总会调用父类构造器一次。子类调用父类的构造器分下几种情况:

1:子类构造器执行体第一行使用super显示调用父类构造器,系统根据super调用里传入的参数列表调用父类的构造器

2:子类构造器执行体第一行使用this显式调用本类中重载的构造器,系统将根据this调用里传入的实参列表调用本类另一个构造器。执行本类中另一个构造器时即会调用父类的构造器

3:子类构造器执行体重即没有super调用,也没有this调用,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器。

 

当调用子类构造器来初始化子类对象时。父类构造器总会在子类构造器之前执行,不仅如此,执行父类构造器时,系统还会再次上溯执行其父类的构造器。。。。以次类推,创建任何对象。最先执行的总是java.lang.Object类的构造器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值