java基础知识十一

Posted 静静的yu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础知识十一相关的知识,希望对你有一定的参考价值。

第十一章

  • 类继承

子类继承了父类中可访问的数据域和方法,子类也可添加新的数据域和方法,
子类不继承父类的构造函数
一个子类只能有一个直接父类:单继承

  • 构造顺序

当第1次创建子类对象时,首先初始化其父类静态成员变量(如果没有父类对象实例化过),然后初始化当前子类对象的静态成员变量
注意:第1次之后创建子类对象时,不会再次初始化父类和子类的静态成员变量。其实静态成员变量在有任何实例对象之前已经存在
接着执行该子类对象的父类(若未定义父类,则一定是Object)的构造函数super(…),可能是编译为父类提供的默认无参构造函数super( )。
然后执行子类实例成员变量定义时的初始化表达式,若定义时未给出初始化值,则默认为0或null。
最后执行子类构造函数体中super(…)后面的语句

  • super关键字

利用supper可以显式调用父类的构造函数
super(parametersopt)调用父类的的构造函数。
必须是子类构造函数的第1条且仅1条语句(先构造父类)。
如果子类构造函数中没有显式地调用父类的构造函数,那么将自动调用父类不带参数的构造函数

编译在为子类添加无参构造函数时,用super( )默认调用父类的无参构造函数,如果找不到父类无参构造函数,则子类添加无参构造函数失败。

  • 方法覆盖

 如果子类重新定义了从父类中继承的实例方法,称为方法覆盖(method override)。
仅当方法是可访问的实例方法时,才能被覆盖,即私有实例方法不能被覆盖,私有方法自动视为final的。
静态方法不能被覆盖,如果静态方法在子类中重新定义,那么父类方法将被隐藏。
一旦父类中的方法被覆盖,则不能通过引用的子类对象访问被覆盖的父类方法。在子类类体函数中可以使用super引用被覆盖的父类方法。
覆盖:子类对象被父类引用变量引用,父类引用变量调用的相同签名的函数是子类函数(不能发现父类函数、晚期绑定)。

隐藏:同上,但父类引用变量访问的是父类变量、函数(可再发现)。

  • object中的方法

equals方法:用于测试两个对象的属性是否相等。其默认实现是比较两个变量是否引用同一个对象,而不是检查对象的属性是否相同,故须在子类进行覆盖。例如,在Circle类中覆盖:
    public boolean equals(Object o){
        if(o instanceof Circle)    //应先检查另一对象o的类型
            return  radius==((Circle)o).radius;//基本类型,==判断即可
        return false;
    }

toString方法:返回代表这个对象的字符串。其默认实现是返回由类名、@和hashCode组成。
    circle.toString( );//Circle@15037e5:默认实现用处小,应在子类覆盖。
getClass方法:用于泛型和反射机制,是一个final方法,故不可覆盖。

  • 多态

多态:使用引用变量调用实例函数时,根据所引用的实际对象的类型,执行该类型的相应实例方法,从而表现出不同的行为称为多态。通过继承时覆盖父类的实例方法实现多态

当调用实例方法时,由Java虚拟机动态地决定所调用的方法,称为动态绑定(dynamic binding) 或为多态

父类变量引用子类对象,可视为将子类对象转换为父类。
子类到父类的转换是合法的,称为隐式转换。
Person p=new Manager();//将子类对象转换为父类对象
从父类到子类必须显式转换。
    Manager m = p; //编译错
   Manager m = (Manager)p;//ok,但转换前没有检查
从父类到子类必须显式转换时进行检查更安全。
   Manager m = null;
   if(p instanceof Manager) m= (Manager)p; //安全:转换前检查

重载发生在编译时(Compile time),编译时编译器根据方法签名找到最合适的方法。早期绑定
多态发生在运行(Run time)时,运行时JVM根据变量所引用的对象的真正类型来找到最合适的实例方法。晚期绑定

  • 访问控制符和finall

final成员变量:常量,数据初始化后不能再修改。
final方法:最终方法,子类不能覆盖。
private实例方法:自动视为final,子类不能覆盖(这点好像有问题,子类不可见,但是子类可以定义与其相同的函数)
final类:最终类,不能派生子类。
final局部变量:常量,数据初始化后不能再修改。



   

 

以上是关于java基础知识十一的主要内容,如果未能解决你的问题,请参考以下文章

零基础学Java—Java 日期时间(三十一)

基础知识《十一》Java异常处理总结

java基础(十一章)

Java基础第十一天总结

大数据Java基础第十一天作业

java基础之二十一-;Stream api