4-5 类和方法,消息、实例、初始化

类和方法

封装

定义:利用抽象数据类型将数据和基于数据的操作封装在一起。
从而使得:

  • 数据被保护在抽象数据类型的内部
  • 系统的其他部分只有通过操作,才能够与这个抽象数据类型交流和交互(将类的数据隐藏,控制用户对数据修改和访问的权限)。

此 抽象数据类型 就是

这种封装的作用:

  1. 将变化隔离;
  2. 便于使用;
  3. 提高复用性;
  4. 提高安全性;

封装原则:

  1. 将不需要对外提供的内容都==隐藏==起来;
  2. 将属性隐藏,提供==公共方法==对其访问。

被封装的对象通过消息传递进行通信。
消息包括三部分:

  • 消息的接受对象——接收器
  • 接收对象采取的方法
  • 方法所需的参数

这里就涉及到Java中的可见性问题了。

  • public修饰类成员——可以通过类的任意对象进行显式调用
  • private——只能在该类中调用,不可以通过对象在外界显式调用
  • protected——可被子类及同一包中的其他类访问
    在这里插入图片描述

那么封装就可以这样来实现了:
将类成员设置为private类型,并为每个属性提供getter和setter方法,提供访问途径。

重复很多遍了……
类是对某一类事物的描述,是抽象的、概念上的定义,相当于一个模板;
对象是实际存在的该类事物的每个个体,是类的实例(instance),同一类的对象具有相同的数据结构和行为。

类的性质

  1. 它的名称 标识了一个类 并且唯一标识
  2. 类必须有成员集合——属性、方法、方法的操作接口
  3. 类的属性的域——基本类/用户自定义的类
  4. 支持信息隐藏

类的定义就不展开了——定义成员变量,和方法。

接口

接口就是一种协定contract,向客户保证类的行为,当类实现接口时,即告知客户“我保证支持这个接口中提出的所有方法、属性、事件”。

一个Java接口是一些方法特征的集合,但没有方法的具体实现。他会在不同的地方被实现,从而拥有不同的行为。

—>抽象类abstract class中的抽象方法。

接口与抽象类非常相似,都有数据成员和抽象方法,但它们有不同之处:

  • 接口的数据成员必须初始化
  • 接口里的方法必须全部都声明成abstract,也就是说,不能像抽象类一样保有一般的方法
  • 抽象类是对的抽象。而接口只是一个行为的规范或规定。
  • 类可以实现多个接口,但只能继承一个父类。

接口的一些特点:

  1. 接口的访问控制修饰符只有public或者缺省。
  2. 接口类型也可以继承,并且可以多重继承
  3. java的类层次结构中有一个顶级类Object ,接口没有
  4. 接口体内只能声明常量字段和抽象方法,常量被隐式声明为public,static,final,方法则为public、abstract,可写可不写
  5. 实现接口可以是某个类的子类,也可以是父类。
  6. 一个类可以“实现”多个接口功能,从而实现多继承
  7. “继承”后的类可以是抽象类也可以是普通类
  8. 类中实现方法时,必须使用与该抽象方法**完全一样的名字、返回类型和参数表**,否则,就构成重载了

虽然接口本身没有实例,但类的实例可以赋值给接口类型的变量,即:

//声明一个接口的引用
//创建类的实例
//将类的实例的地址赋给接口的引用
接口 变量 = new 实现接口的类();

属性

属性通过访问器访问:

  • 只有get——只读属性
  • 只有set——只写属性
  • 两者都有——读写属性

实际上java中没有属性这个概念,只有字段和方法。字段,通常叫做“数据成员”。但可以通过私有字段+get/set实现类似属性的效果。

内部类(嵌套类)

指在一个类中定义另外一个类。

可以将一个类的定义放在另一个类的定义内部,这就是内部类。

Java内部类被连接到外部类的具体实例上,并且允许存取其实例和方法。

  • 允许把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性。
  • 与组合完全不同。
class Outer
{
   
    private int size ; //外部类的成员变量
    private String thoughts = "My outer thoughts";

    class Inner //声明内部类
    {
   
    	//内部类的成员变量
        String innerThoughts = "My inner thoughts"; 
		//内部类的成员方法
        void doStuff() 
        {
   
            // 内部类有自己的 "this"实例 
            System.out.println
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边懵懵'.ㅅ'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值