zoukankan      html  css  js  c++  java
  • java面向对象基础2

    构造方法

    构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。Java通过new关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。

    构造方法总结:

    1)给成员变量赋初值
    2)与类名相同,无返回值,void都不用写,由public修饰。
    3)在创建对象时会自动调用构造函数
    4)若自己不写构造方法,会自动调用无参构造
    5)构造方法可以重载

    如果构造方法中形参名与属性名(即成员变量)相同时,需要使用this关键字区分属性与形参。this.id 表示属性id;id表示形参id。

    垃圾回收机制(Garbage Collection)

    垃圾回收又称gc, gc是运行在Jvm中,回收应用程序中创建的一些无用的对象,回收没有任何引用指向的对象。

    栈空间的内存由系统自动分配,一般存放局部变量等,不需要手动管理内存。对于c/c++这种语言,每当我们malloc动态分配一块内存或new一句爱内存时,都需要我们手动的去释放内存。如果不显示的释放内存,此块内存就不能分配给其他对象,该内存会在程序结束之前一直被占用;若一些内存没有及时被回收会造成系统运行减慢,甚至瘫痪,这种现象叫做内存泄漏。

    this关键字

    指代当前对象,哪个对象调用方法,它指的就是那个对象。

    只能用在方法中,在类的方法中只要访问成员变量,默认都有this。严格来讲在方法中,需要用过this关键字来指明当前对象。

    由于在构造方法调用前,对象已经创建。因此,在构造方法中也可以使用this代表“当前对象” 。一般在构造方法中不省略this。

    this的用法:

    1)this.成员变量名————————访问成员变量。
    2)this.方法名()————————调用方法( )//无意义,一般不用。
    3)this()——————————— 调用构造方法 //应用率不是很多 一般用于重载构造方法。

        //构造方法
        public GouZao(String name,int age,String address){
            this.name = name;//this.成员变量来调用 成员变量 
            this.age = age;
            this.address = address;
        }
        //构造方法重载,this()用于调用构造方法,以实现构造器重载(代码简洁)
        public GouZao(String name,int age){
            //this.name=name;
            //this.age=age;
            this(name, age,null);//和以上两行代码一样效果
        }
        public GouZao(String name){
            this(name,0);
        }

    封装

    我要看电视,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰碰显像管吗?制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口,比如:电源开关。具体内部是怎么实现的,我们不需要操心。

    封装的具体优点:

    1. 提高代码的安全性。

    2. 提高代码的复用性。

    3. “高内聚”:封装细节,便于修改内部代码,提高可维护性。

    4. “低耦合”:简化外部调用,便于调用者使用,便于扩展和协作

    继承

    继承让我们更加容易实现类的扩展。 比如,我们定义了人类,再定义Boy类就只需要扩展人类即可。从英文字面意思理解,extends的意思是“扩展”。子类是父类的扩展。现实世界中的继承无处不在。

    java不支持多继承,泛化:抽出超类的过程。继承要符合是一个的关系 如:老虎类是一个动物类。

    1.继承作用为代码的复用。

    2.通过关键字extends来继承

    3.父类/超类是共有的属性和行为,子类/派生类在父类/派生类的基础之上,还有各自的特有属性和行为。

    4.在子类的构造方法中若不自己调用父类的构造方法,则默认用super() 调用超类的构造方法,若超类中没有无参构造方法,则会报错。此时就需要显示的调用super()的有参构造。

    5.super()调用超类的构造方法,必须位于派生类构造方法的第一行。

    6.派生类是通过super()调用超类构造方法,而不是继承。

    super关键字

    super指当前对象的超类对象。

    用法:1.super.成员变量名 ———————— 访问超类的成员变量

               2.super.方法名        ———————— 调用超类的方法

               3.super()                 ———————— 调用超类的构造方法

    派生类访问超类的属性和方法时,用super.和this.都可以。因为派生类是继承了超类的属性和方法的,所以可以用this.来调用。

    多态

    多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。 比如:同样是调用人的“休息”方法,张三是睡觉,李四是旅游。

    多态的要点:

    1. 多态是方法的多态,不是属性的多态(多态与属性无关)。

    2. 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象(向上造型)。

    3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

    所有抽象方法都是多态的---行为的多态

    所有对象都是多态的--对象的多态 //因为所有的类都是隐式的继承了Object这个父类,所以只要是个对象他都是多态的

    多态一般会都用到向上造型和强制类型转换。

    向上造型/自动类型转换

    超类型的引用指向派生类的对象。
    能造型成为的数据类型有:超类或者所实现的接口 。
    能点出来什么 看引用的类型。

    向下造型/强制类型转换成功的条件只有如下两种)

    引用所指向的对象,就是该类型

    引用所指向的对象,实现了该接口或继承了该类

    建议强转之前使用instanceof方法判断引用指向的对象 是否是该类型。

    强转时若不符合如上条件,则发生ClassCastException 类型转换异常 。 

    小转大,自动!自动类型转换(也叫隐式类型转换) 

    大转小,强转!强制类型转换(也叫显式类型转换) 

    向上造型

    向上造型是指,父类引用指向子类对象。子类引用的对象转换为父类类型。

    向上造型后  子类 将不再具备其自己定义的方法,只有父类的方法。但若重写了父类的方法,向上造型的对象的方法为重写后新的方法。

    在日常生活中,我们都扮演着不一样的角色。我们有可能是老师,有可能是学生;但是我们都有共同的属性,例如:名字、性别、年龄,但是在该基础上,不同身份的人也有着属于自己的不同的特点。我们通常描述他人的时候会说,这个人是老师,这个认识学生,这个人是个程序员。实际上“这个人是……”这种说法就是向上造型。

    1)超类型的引用指向派生类对象

    2)java中规定能点(调用)出来什么,看引用类型。 即向上造型只能点出来超类的,派生类所特有的不能访问。

    3)是父类的类型

    向下造型

    向下造型一般是采用了向上造型之后才会采取向下造型。向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,我们就需要进行类型的强制转换,我们称之为向下造型!

    把指向子类对象的父类引用赋给子类引用,需要强制转换。

    例如:

    Father f1 = new Son();

    Son s1 = (Son)f1;

    向上造型意义:当一个方法在子类中进行重写的时候,调用不同的子类可能需要new对象很多次,再调用对应的方法,会出现很多的代码重复,对于代码结构来说很不好看。

    程序开始的时候确定有一个father型对象,但是要根据用户的选择来决定他要被实例化成哪种类型的。但如果你要分开来声明的话,那你就因为不确定性必须要声明两个变量,分别来等待实例化。就是实例化的时候可以根据不同的需求实例化不同的对象,这也就是多态的意义

    向下转型的意义为:最大的用处是java的泛型编程,用处很大,Java的集合类都是这样的。单独看向下造型是没有什么作用。向下造型就是向上造型的反向作用。我们的世界是平衡的,既然java的开发者发明了向上造型,你应该一起发明了向下造型。

    例如:体育馆里面有一个球柜,里面放着足球,篮球,排球。

    然后我们想把这些球放到球柜里面,定义下面的list

    List<ball> ballplace = new ArrayList<ball>();

    运用向上造型:

    Ball a = new football();

    Ball b = new basketball(); 

    Ball c = new volleyball();

    这样就将足球,篮球,排球的集体球放进去了。不然就要定义足球柜,篮球柜,排球柜。要是有更多的就会定义很多集合。这样不堪设想。

    想一想我们前面说的向上造型后,子类的各自的特有方法就没有了。那么我们从集合里面取出a,b,c的时候我们有想使用子类的特有方法怎么办呢!这里我们就用到了向下造型。取出a,b,c对象后用向下造型将它们转化成football,basketball,volleyball。这样就能用它们各自自己的方法了。这也是向下造型的具体用处

     

  • 相关阅读:
    什么时候用resultMap,什么时候用resultType?
    Cannot create PoolableConnectionFactory解决思路
    去除list集合中重复项的几种方法-转载
    ORA-02298 定位问题
    命令行退出MySQL和登录MySQL
    CX4-480服务器数据恢复过程(服务器数据恢复通用方法)
    也谈腾讯云的静默损坏
    raid5阵列两块硬盘离线怎么解决
    服务器卷删除初检报告/数据恢复成功率分析
    服务器两块硬盘离线如何恢复数据
  • 原文地址:https://www.cnblogs.com/zqf-bczl/p/13381105.html
Copyright © 2011-2022 走看看