继承(Extends)

来源:互联网 发布:暴风tv直播软件 编辑:程序博客网 时间:2024/05/22 19:35
/**特性
 * 同类型之间可以继承,类与类,接口与接口
 * 继承只能是单一的 
 * 只有private修饰的属性和方法不可被继承下来(包括最终的静态的属性,静态的同步的方法)
 * 子类的创建会调用父类的静态块,非静态块和构造器。
 * 子类中的构造器会隐式添加super()调用父类无参构造器
 *
/**继承的作用?
 * 代码重用
 *
/**强转
 * 引用是子类和引用是子类之间的强转,是编译异常,如果没有继承关系,任何两个类之间的强转,都将是编译异常,因为
 * 任何一个类的父类都是Object。
 * 父类强转成子类,是运行时异常,ClassCastException
 * 继承中的转换,只能是子类自动转为父类。没有强转,如果采用强转的语法去把子类转为父类,对象依然是子类。
 * 可以理解为无法进行强转,但编译器也不会报错。
 *
/**父子类中的静态属性,非静态属性,静态块,非静态块,构造器的执行顺序。
 * 父类静态块和静态属性-->子类静态块和静态属性-->父类非静态块块和非静态属性-->
 * 子类非静态块和非静态属性-->父类构造器-->子类构造器
 *
/**子类创建前的操作--调用父类构造器super(有参数或者没参数)
 * 子类中的构造器,无论有没有编写super(),默认都有super()这句命令。
 * 该命令为调用父类默认构造器,调用构造器和调用静态方法一样会加载类,从而引发静态块和非静态块的执行。
 * 但并不意味着子类的创建会带动父类的创建。但也并不说明没有创建父类。
 * 如果父类定义了有参的构造器并且子类没有调用父类有参构造器,那么父类必须包含一个无参的构造器
 * 因为在创建子类时,调用了构造器,而构造器默认有super()命令调用父类的无参构造。
 * 在父类有参的前提下,调用无参出现编译异常。所以在子类中必须要有调用父类有参构造器的语句:super(parameters);
 * 如果没有的话父类就必须有无参的构造器。
 *
/**用父类引用去接受子类对象,调用子类的某个方法(该方法覆盖了父类的方法),执行的是父类的方法还是子类的方法?
 * 子类,引用决定可调用的方法列表,方法的位置来源于创建的子类对象。也就是说如果子类中拥有父类没有的方法,
 * 并且用父类引用去接受子类对象的时候,那么无法调用子类的该方法。如果强硬编写调用该方法,会出现undefined。
 * 如果调用了父类和子类都有的方法,那么会执行子类的方法,如果子类中没有,那么会执行父类的方法。
 *
/** 父类有一方法访问修饰符为protected,子类同名方法同参数,访问修饰符可否更改?(重写/覆盖)
 * 以,但是访问修饰符的范围一定要比父类的访问修饰符小或者相等。如果方法抛出了异常,要么不抛异常,
 * 要么异常也必须是父类所抛出异常或者其子类。重写有三不改,返回类型不能改,参数类型不能改,参数个数不能改。
 * 也就是方法原型(访问修饰符,返回类型,参数,抛出的异常)要统一或兼容。
 *
/**父类私有的属性如何被继承下来?
/**子类若编写了和父类同样的属性,并且继承了父类的get方法,当子类对象执行了get方法后,返回的是子类的属性还是父类的?
 * 1,通过继承get方法继承下来。
 * 2,父类的,子类虽然继承了父类的get,但是子类并没有覆盖父类的get方法,所以get方法是父类所有的,
 * 执行的便是父类的get方法,所以获取的是父类的属性。
 * extends是扩展,并不是真的去继承,super还是super的,sub还是sub的。sub可以引用super的非private的属性和方法
 * 并不意味着super的属性和方法就属于sub。extends只是一个扩展,扩展super类中没有的东西或者没有实现的东西或者去覆盖
 * super类的方法来满足新的业务需求。 
 *
 * @author silone
 *
 */





0 0
原创粉丝点击