java入门学习(二)

一.类和对象

  1.开篇瞎BB

  物以类聚。

  世间万物皆对象,对象是能接触到的实体。类是一组有相同属性和方法的对象的集合,或者说它们的特征提取,类是一种抽象的概念。类由属性和方法组成,属性是它的各种静态的特征,方法是它能干啥。《易》有云,“物以类聚,人以群分”。

  打个比喻,有一群人都在追一个很可爱的姑娘。这群人可以抽象出一个类,他们有相同的属性,比如都喜欢这姑娘,都是男孩子。他们有一些相同的方法,什么送花儿呀,请吃饭呀,请看电影呀,陪姑娘聊天呀。所以呀,他们是一个类。而单独的一个人就是一个对象,这个对象一定具有这个类里的属性,也一定可以干这个类中的方法【人家干不干是另一说啊】,当然,也可以干其他各种各样不包含在类里的事。所以呀,姑娘选人不是看类的方法和属性,反正都是一样的,人看的是你此外还能干啥,也看的是你现有方法中,你咋个顺序干呢~【吐槽而已,认真你就输了】

  类和对象毕竟只是一种静态的描述和表示,而程序是会运作起来的世界。人生有那么多种可能,而你却只能选择一条路。

  2.定义类

  //类名要求首字母大写

  public class 类名

  {

    //属性(成员变量)

    类型 类型名;

    ...

    //方法

    方法;

    ...

  }

  3.创建对象

    类名 对象名=new 类名();

  4.使用对象

    对象名.属性

    对象名.方法()

    //float变量赋值需要加f,否则默认浮点数为double,如 float x; x = 0.5f;

  5.成员变量和局部变量

    成员变量是类中定义的,局部变量是类的方法中定义的。

    作用域不同,局部变量只在方法内可用。

    初始值得区别【成员变量自动赋初始值,局部变量需初始化】

  6.构造方法

    用于创建对象和初始化对象的值。其名称与类名同名,无返回值。

    使用:new + 构造方法

    【之前所用的创建对象相当于java自动创建了一个无参的构造方法,直接使用该无参的构造方法,若代码段中有构造方法,无论是有参还是无参,java都不会自动创建啦】

    定义:

    public 构造方法名()  //有参无参均可

    {

    //初始化

    }

  7.static

    直接在下述的定义前面加上static即定义为静态了。

    a.静态变量

      该类所有对象共享,属于整个类所有。可直接用类名访问,也可用对象名访问。【类名.属性】

      第一次使用时就有了该变量,后面再创建该类的对象还是只有第一个的。

    b.静态方法

      静态方法可以直接调用静态变量,但不可直接调用非静态变量,若要调用非静态变量,可以创建类然后调用。

      静态方法可以直接掉用静态方法,但不可直接调用非静态方法,若要调用非静态方法,可以创建类然后调用。

      普通方法可以直接调用静态和非静态的变量。

      【小结:非静态均可直接调用,静态只能直接调用静态。谁让他们都是些高冷的小傲娇!其他人就不理他们!】

    c.静态初始化块

      初始化块可以直接在类中通过大括号添加,创建类时就直接依次执行这些初始化块了。

      静态初始化只在第一次创建该类对象时执行,只执行一次,且只能初始化静态变量。【傲娇小天团~】

 

类的三大特性:封装、继承、多态

 

二.封装:

  1.定义和实现

    定义:要求只通过类的方法对该类进行各种操作,把类的各种属性隐藏起来。就是“封装”的字面意思。

    实现:将属性修改为private,用getter/setter方法进行属性的修改。【eclipse可自动生成,Source菜单】

       一般getter方法名取为get+属性名首字母大写。

         一般setter方法名取为set+属性名首字母大写。

  2.包:

    定义:用于管理java文件,解决类的同名问题。

        package 包名;    //使用,包名间使用.隔开,全小写,用于区分层次,类似于文件路径

                   //系统中的类也常用该命名方式:java.(功能).(类)

    使用:

        import 包名;    //.*通配符,包括该目录下的所有

  3.访问修饰符

  本类 同包 子类 其他
private o      
默认 o o    
protected o o o  
public o o o o

 

 

 

 

  4.this关键字

    表示当前对象

    使用:  this.属性

         this.方法

  5.内部类

    定义在一个类里面的类。

    使用:

    Outter o = new Outter();  

    Inner i = o.new Inner();  //内部类名 对象名 = 外部对象名.new 内部类名()

    a.成员内部类

      定义:内部类做为外部类的一个成员存在。

      内部类访问外部类时需要用this关键字。如: Outter.this.h  //外部类名.this.属性

    b.静态内部类

      定义:对内部类加上static修饰符。

      对外部类的非静态成员的访问:new 外部类().成员

      外部类静态成员的访问:  类名.成员【同名】

                   成员【不同名】

      创建时不需创建外部类,可直接创建内部类。

    c.方法内部类

      定义:定义在外部类的方法中,只能在该方法中使用。故不能使用访问修饰符和static修饰符。

三.继承

  1.基本定义

    字面意思,一个类(子类)继承了另一个类(父类)的属性和方法。【private修饰的属性和方法不可继承】【eclipse创建子类可直接选择继承父类,superclass】

        class 子类 extends 父类

  2.方法的重写

    子类重写父类中有的方法。要求返回值、方法名、参数个数和类型均相同。使用时则优先使用子类的方法。

    可以修改访问修饰符,重写的访问修饰符不能比原访问修饰严格。

  3.final关键字

    修饰类。该类不允许被继承

    修饰方法。该方法不允许被重写(覆盖).

    修饰属性、变量。变为常量。要求在定义时或构造方法中初始化,保证有且仅有一次的初始化。

  4.super关键字

    子类中使用,代表父类对象。

    用法:  super.属性    super.方法

    子类构造必须调用父类构造方法,系统隐式调用父类的无参构造方法,显式书写必须写在子类构造方法的第一行。

  5.Object类

    该类是所有类的父类,根。

    常用方法:

    a.toString()

      该方法直接调用返回对象的哈希code码,即地址。常重写该方法表示对象的属性。【eclipse可自动生成,Source菜单】

    b.equals()

      字面意思,比较是否相同。而现实中我们所谓的相同有两种。一种是世界上独一无二的同一个,比如你就是独一无二的,你的名字、身份证号反正都是指的你,都是相同的。一种是属性相同,比如说你们俩的校服一样。Object类中的equals方法比较的是第一种相同,即对象的使用是否指向同一块内存地址。常通过重写比较第二种相同。【eclipse可自动生成,Source菜单】该方法包含一个参数为对象的引用;返回类型为bool。此外,equals()重写中用到的getClass()方法得到类对象。区分类对象和类的对象,前者表示你有哪些种类的属性,后者表示该属性你具体值是多少。

四.多态

  1.

  关于引用,私以为,引用就是给你起个名字或者说拿个啥东西指代你,比如说你的小名啊、身份证号啊、外号啊,这都是引用,都是指你。但是引用不是你本身,只是指你而已,可以直接使用。类似指针。d

  关于多态,就是对象的多种状态,有两种多态。一种是引用多态,一种是方法多态。

  引用多态,是说父类的引用可以指向本类和子类的多态,但子类不能指向父类。说白了,你爸能给你起名字,你不能给你爸起名字。

        父类名 引用名 = new 父类名或子类名();

  方法多态,是说通过上面的引用多态创建了对象,如果是本类对象,调用的方法就是本类的方法;如果是子类的对象,调用的方法就是重写或者继承的方法;如果是子类对象独有的方法,那就不能使用。说白了,你爸给你起了名字,但你还是你自己,这个引用是你爸通过自己能干啥知道的你能干啥【因为继承】,但你很可能有些事儿有些本事你爸不造吧~那他就当然没法叫你干这种事儿了喽~

  2.类型转换

   对象间的类型转换类似一般的属性间的类型转换,父类为上,子类为下,向上可自动转换,向下强制转换,同级不可转换。用instanceof关键字判断该引用是否可以转换为该类型。

      引用名  instanceof  类型名;//返回bool值,true为可以转换,false为不可转换

  3.抽象类

   约束所需的方法,不要求具体实现。需加上abstract关键字,可修饰类和方法。包含抽象方法的一定是抽象类,抽象类中可以有普通方法。

   通过子类的继承,方法的重写,实现具体的方法。

   其中abstract必须在最前面,eclipse可自动添加。

  4.接口

   感觉就是一种需求,用于继承和实现,所以必须是public。类似于类,定义不用class,用interface。其中属性一定是常量,方法一定是抽象方法,即全局常量和公共抽象方法。一个类可以实现多个接口,用implements,定义时写在继承的后面。用接口的引用直接new一个接口,使用匿名内部类可直接实现该接口的方法,并通过引用调用。接口名取名前一般加上I表示是接口(interface)

你可能感兴趣的:(java入门学习(二))