• Java学习笔记Day3 面向对象编程-高级类特性1


    继承Inheritance:
    extends关键字
    把共性的属性与方法抽取出来形成父类,有实际需求的子类在继承父类的基础上完成自己的特有代码即可
    提升了代码的复用性;继承使得类之间相关联,提供了多态的前提
    不要仅为了获取其它类的某些属性或方法就去继承,要讲究逻辑关系
    子类是父类的拓展
    子类不可访问父类private的属性和方法
    Java只支持单继承 一个子类只能有一个父类
    但是允许多层继承: 子类 -> 父类1 -> 父类2

    方法的重写:
    子类重写override父类的方法, 只是重写方法体的代码
    重写的方法不能比父类原方法访问权限更加严格
    重写和被重写的方法必须同时为static或非static
    @override 标签更符合代码规范且有提示方法名错误的效果
    子类的重写方法可以覆盖父类的方法,但是子类的实例变量不会覆盖父类中的同名实例变量,父类中的同名实例变量被隐藏起来

    super关键字:
    调用父类中的指定操作(属性,方法,子类构造方法中调用父类的构造器)
    super可以向上追溯所有父类(多层继承)
    super用法与this相类似,this代表本类对象的应用,super代表父类的内存空间标识
    子类的初始构造器默认访问父类中无参的构造器
    在父类只有有参构造器可使用时,子类必须显示构建一个构造方法,借助super关键字来调用父类的构造器,并且super代码要放到第一行

    简单类对象的实例化过程
    Person per = new Person();
    在方法区中加载Person的class文件 -> 在栈中为变量per分配内存 -> 在堆中为对象开辟空间,分配地址 -> 堆中对象属性先默认初始化再显示初始化 -> Person()构造方法(函数)进栈 -> 将对象在堆中的地址赋值给栈中变量per -> Person()构造方法出栈

    子类对象的实例化过程:
    Student stu = new Student(); Student是Person的子类
    在方法区先加载父类Person文件再加载子类Student文件 -> 在栈中为变量stu分配内存 -> 在堆中为对象开辟空间,分配地址 -> 堆中对象属性默认初始化 -> 子类构造方法进栈 -> 父类显示初始化 -> 父类构造方法进栈出栈 -> 子类显示初始化 -> 将对象在堆中的地址赋值给栈中变量per -> 子类构造方法出栈

    多态Polymorphism: 

    1.方法的重载overload与重写override
    2.对象的多态性--编译时类型和运行时类型不一致(Java的引用对象有两个类型:编译时类型和运行时类型)
    子类的对象可以代替父类的对象使用
    一种变量只能有一种确定的数据类型
    一种引用类型变量可能指向多种类型的对象(本身或者其子类)

    Person p = new Student();
    向上转型upcasting: 子类可以看成特殊的父类, 所以父类类型的引用可以指向子类的对象
    属性是在编译时确定的, 属性不具有多态性, 只由引用变量所属的类决定

    所以该对象不能再访问子类中添加的属性和方法(非override)

    虚拟方法调用: 成员方法的多态
    Java方法运行在栈中, 在运行方法时会动态地进栈出栈
    编译时查看引用对象所属的类中是否有所调用的方法

    运行时调用实际对象所属的类中的重写方法
    方法的调用是在运行时确定的, 多态情况下调用的是子类的重写方法--动态绑定(基于方法的重写)

    总结:多态与继承、方法重写密切相关,我们在方法中接收父类类型作为参数,在方法实现中调用父类类型的各种方法。当把子类作为参数传递给这个方法时,JVM会根据实际创建的对象类型,调用子类中重写的方法(动态绑定)。

    继承与多态的区别 

    封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的类--它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

    instanceof操作符:
    对象 instanceof 类名(父类子类) 返回boolean类型
    Person p1 = new Student(); p1 instanceof Student ture
    Student p2 = new Student(); p2 instanceof Person ture
    检验某个对象是否是某个类或其父类的实例

    Object类(基类):
    所有Java类的根父类
    未使用extends关键字指定父类的类具有Object的默认父类
    Object类是所有Java类的父类 + 子类对象可以代替父类对象 -> Object类可以作为以任何类为参数的方法的形参
    Object方法:
    a.equals(b); 返回boolean类型 判断a与b是否引用同一对象
    a.hashCode(); 返回int类型 取得Hash码
    a.toString(); 返回String类型 获取对象的地址Student@28a418fc

  • 相关阅读:
    【Silverlight】Bing Maps学习系列(八):使用Bing Maps Silverlight Control加载自己部署的Google Maps
    Visual Studio 2010在简洁中强调团队合作
    【Silverlight】Bing Maps学习系列(九):自定义功能导航条(Custom NavigationBar)
    Flash OBJECT 和 EMBED 标签
    SWFObject 的原站提供的使用说明
    一篇清楚阐述 JAvaScript 传递数据 到 Flash 的文章
    Flare 的 Edge边上加 Label
    借助 SWFObject 实现利用JavaScript嵌入 Flash
    3种基本的Flash/Javascript通信方式 (转)
    passing data from HTML to Flash
  • 原文地址:https://www.cnblogs.com/ziyang1060/p/13559693.html
Copyright © 2020-2023  润新知