java类与对象

面向对象

  • 构造器:new就是一个构造器,作用是:①分配空间;②赋初始值(避免错误,简化输入);
  • new Object(Parameters)构造器调用构造函数,传参为了赋初始值;
  • 对象的基本元素是:属性和方法 类成员(属性和方法)。属性最为重要,属性的集合是一个状态,方法是一个状态到另一个状态的桥梁;
  • 封装:属性和处理属性的方法集合起来。把数据及数据的操作方法放在一起,作为一个相互依存的整体,即对象。

类的访问控制符只有三种:public、private、protected

类和对象的概念
类:类是一个模板,它描述一类对象的行为和属性。
对象:对象是类的一个实例,有 属性 和 行为 。

创建对象使用的公式就是: 类名 对象名 = new 类名();
给对象的属性赋值: 对象名.属性名 = 值;
使用对象的属性: 对象名.属性名
调用对象的方法: 对象名.方法名();

构造方法:
构造方法:对象被创建的时候会调用的方法,对象在被创建的时候,也就是被new的时候,会自动调用构造方法。

构造方法定义要求:

  1. 构造方法可以有参数,也可以没有参数
  2. 构造方法没有返回值,也不需要void关键字
  3. 构造方法名必须和类名相同
  4. 如果定义的类没有声明构造方法,对象在创建时默认使用空的构造方法。
  5. 构造方法与对象的方法不同,它是在对象创建时自动调用的;

构造方法可以被重写但不能被重载,因为重写发生在父类和子类之间,要求方法名称相同,而构造方法的名称是和类名相同的,而子类类名不会和父类类名相同,所以不可以被重写

static

static是静态的意思,是一个修饰符.static修饰变量,这个变量就变成了静态变量,修饰方法这个方法就成了静态方法,
static关键字方便在没有创建对象的情况下来进行调用(方法/变量)。
static修饰的变量饿和方法又称为类变量和类方法。

类变量的访问不需要创建对象,直接 类名.成员变量。进行访问。
类方法的访问也是直接***类名.方法名***,进行访问。

如果一个类的成员变量被static修饰了,那么所有该类的对象都共享这个变量。无论这个类实例化多少对象,它的静态变量只有一份拷贝。

静态方法不能使用类的非静态变量
在这里插入图片描述static修饰的是静态方法

静态方法可以直接调用静态方法,但是调用普通方法只能通过对象的实例才能调用。
在这里插入图片描述
静态代码块
类被加载的时候运行且只运行一次
在这里插入图片描述
静态代码块是不需要依赖main方法就可以独立运行的

  1. 静态方法不能调用非静态变量,非静态方法可以调用静态变量。静态方法属于类而不属于对象,不需要实例化。
  2. 静态方法可以直接调用静态方法,不能调用非静态方法,可以理解为静态方法的产生比非静态方法早,因此在调用的时候静态方法找不到非静态方法,所以会出错。

封装
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
在这里插入图片描述封装的意义
对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。使用封装有四大好处:

  • 良好的封装能够减少耦合;
  • 类内部的结构可以自由修改;
  • 可以对成员进行更精确的控制;
  • 隐藏信息,实现细节。

封装把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。

继承

可以让某个类型的对象获得另一个类型的对象的属性的方法。
继承需要符合的关系是:is-a,父类更通用,子类更具体。

继承的特性:

  • 子类拥有父类非private的属性和方法;
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
  • 子类可以用自己的方式实现父类的方法;
  • 在Java中只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类,但是Java中却允许多层继承,多层继承就是,例如类C继承类B,类B继承类A,所以按照关系就是类A是类B的父类,类B是类C的父类,
  • 提高了类之间的耦合性

类B继承类A:class B extends A
子类对象在实例化时会默认先去调用父类中的无参构造方法,之后再调用本类中的相应构造方法。

  • 如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下写不写super()语句效果都是一样;
  • 如果子类的构造方法中通过super显示调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法;
  • 如果子类的构造方法中通过this显示调用自身的其他构造方法,在相应构造方法中应用以上两条规则;
  • 特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。

super
super主要的功能是完成子类调用父类中的内容,也就是调用父类中的属性或方法。

super关键字的用法如下:

  • super可以用来引用直接父类的实例变量;
  • super可以用来调用直接父类方法;
  • super()可以用于调用直接父类构造函数。

super与this的区别

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。
在这里插入图片描述在子类中引用父类的构造函数需要在程序首行增添super();
super调用父类的构造方法,如果父类的构造方法中含有参数,那么在子类的构造方法中首行写super(******),括号中需要写出对应的输入值。

重写
当一个子类继承一父类,而子类中的方法与父类中的方法的名称、参数个数和类型都完全一致时,只是方法体发生改变。

  • 重写的方法不能比被重写的方法有更严格的访问权限;
  • 重写的方法不能比被重写的方法产生更多的异常

重载
多个方法可以享有相同的名字,但是参数的数量或类型不能完全相同。

重载的规则

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);***
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载;
  • 无法以返回值类型作为重载函数的区分标准。

抽象类
抽象类的作用有点类似“模版”,其目的是要设计者依据它的格式来修改并创建新的类。但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象。

  • 抽象类和抽象方法都必须用abstract关键字来修饰;
  • 抽象类不能被实例化,也就是不能用new关键字去产生对象;
  • 抽象方法只需声明,而不需实现;
  • 含有抽象方法的类必须被声明为抽象类,抽象类的子类必须复写所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。

抽象方法只是声明了返回值的数据类型,方法名称和参数,没有去定义方法体。

final

final关键字的使用
在Java中声明类、属性和方法时,可使用关键字final来修饰。

  • final标记的类不能被继承;
  • final标记的类不能被继承;
  • final标记的变量(成员变量或局部变量)即为常量,只能赋值一次。
  • 声明为final的类隐含地声明了该类的所有方法为final方法。
  • 一个类不能既是抽象类又是final类。
  • final和static一起制定一个类常量

多态
指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。同一个事件发生在不同的对象上会产生不同的结果。

多态的三个条件:

  • 继承的存在(继承是多态的基础,没有继承就没有多态);
  • 子类重写父类的方法(多态下调用子类重写的方法);
  • 父类引用变量指向子类对象(子类到父类的类型转换)。

用 instanceof 判断一个类是否实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。instanceof 的语法格式为:

对象 instanceof 类(或接口),返回值是布尔型的,或真(true)、或假(false)。

接口
接口(interface)是Java所提供的另一种重要技术,它的结构和抽象类非常相似,也具有数据成员与抽象方法,但它与抽象类又有以下两点不同:

接口里的数据成员必须初始化,且数据成员均为常量;

接口里的方法必须全部声明为abstract,也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法”。
    interface 接口名称 // 定义抽象类
    {
        final 数据类型 成员名称 = 常量; //数据成员必须赋初值
        abstract 返回值的数据类型 方法名称(参数...);
        //抽象方法,注意在抽象方法里,没有定义方法主体
    }

接口实现

    class 类名称 implements 接口A,接口B //接口的实现
    {
        ...
    }

一个类只可以继承一个父类,但却可以实现多个接口。
接口的扩展(或继承)也是通过关键字extends来实现的。有趣的是,一个接口可以继承多个接口。

    interface 子接口名称 extends 父接口1,父接口2...
    {
        ...
    }

String中的每一位不是char类型,所以要将String中的每一位用char表示,就需要用使用
String.charAt( index ) 方法,返回在index位置的char字符。(返回值:char )
使用 String.toCharArray( ) 方法,将String 转化为 字符串数组。(返回值:char[] )

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值