java 的访问修饰符?封装?继承?super?

访问修饰符🚩

  • java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围)
  1. 公开级别:用public修饰,对外公开
  2. 受保护级别:用protected修饰,对子类和同一个包中的类公开
  3. 默认级别:没有访问修饰符号,向同一个包的类公开
  4. 私有级别:用private修饰,只有类本身可以访问,不对外公开
    在这里插入图片描述
  • 注意事项和使用细节
  1. 修饰符可以用来修饰类中的属性、成员方法和
  2. 成员方法的访问规则和属性完全一样
  3. 只有默认和public才能修饰一个类,并且遵循上述访问权限

封装🚩

面向对象编程(object-oriented programming, OOP)的三大特点:封装、继承和多态

封装(encapsulation)就是把“抽象出的数据”(属性)和“对数据的操作”(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过“被授权的操作”(方法),才能对数据进行操作

  • 优点
  1. 隐藏实现细节,仅对外提供操作接口即可
  2. 可以对数据进行验证,保证安全 合理
  • 封装的实现步骤
  1. **将属性进行私有化 **private(外部不能直接修改属性)
  2. 提供一个公共的(public)set方法,用于对属性判断并赋值
public void setXxx(类型 参数名)
{
	//加入数据验证的业务逻辑
	属性 = 参数名;
}
  1. 提供一个公共的(public) get方法,用于获取属性的值
public XX getXxx()
{
	//权限判断
	return xx;
}
  • 当使用构造器时,直接赋值会绕过set方法中的数据验证,可以使用定义的public的set方法来赋值
public Person(String name, int age, double salary)
{
	setName(name);
	setAge(age);
	setSalary(salary);
}

继承🚩

  • 继承可以解决代码复用。当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类则不需要再重新定义,只需通过extends来声明继承父类即可。

在这里插入图片描述

  • 语法
class 子类 extends 父类{}
  1. 子类会自动拥有父类定义的属性和方法(不包括父类private的属性和方法
  2. 父类又叫超类、基类
  3. 子类又叫派生类
  • 注意事项和使用细节
  1. 子类继承了所有的属性和方法,但是私有属性和方法不能直接在子类中访问,要通过公共的方法访问

  2. 子类默认(一定会)调用父类的构造器,完成父类的初始化

  3. 当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,即子类构造器默认会执行super(),不管你是否显示调用super()。如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用父类的哪个有参构造器完成对父类的初始化工作,否则,编译不通过

  4. 如果希望去调用父类的某个构造器,则使用super显式地调用

  5. super在使用时,只能放在构造器的第一行

  6. super()和this()都只能放在构造器的第一行,因此这两个方法不能共存于同一个构造器

  7. java的所有类都是Object类的子类

  8. 父类构造器的调用不限于直属父类,将一直向上追溯直到Object类(顶级父类)

  9. 子类最多只能继承一个父类(指直接继承),即java中是单继承机制,如果想同时继承A和B,只能是B继承A,C再继承B,这样C就能同时继承A和B(间接的方式实现要求)

  10. 不能滥用继承,子类和父类之间必须满足is-a的逻辑关系

    比如:Cat is a Animal; //cat可以继承animal类

    ​ Person is not a Music;//Person并不是一个音乐,不符合继承的逻辑

  • 继承的本质

    当子类对象创建好后,建立查找的关系

在这里插入图片描述

  • 查找子类属性的流程—在堆区查找

    1. 首先看子类是否有该属性

    2. 如果子类有该属性,并且可以访问,则返回信息

    3. 如果子类没有该属性,就查看父类有没有该属性

    4. 父类如果有该属性,并且可以访问,就返回信息

    5. 如果父类没有,就按照相同的规则继续查找上级父类,直到Object

    但是 如果父类有但是无权访问,就会报错,不会继续向上查找了

  • 查找方法的流程----在方法区的类加载信息查找,类似属性的查找规则

super

  • 基本语法
  1. 访问父类的属性(除private外),语法:super.属性名;
  2. 访问父类的方法(除private外),语法:super.方法名(参数列表);
  3. 访问父类的构造器,只能放在构造器的第一句,语法:super(参数列表);
  • 好处
  1. 调用父类构造器:分工明确,父类属性由父类初始化,子类属性由子类初始化

  2. 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super。如果没有重名,使用super、this、直接访问效果是一样的。

    本质是因为this和直接访问是从本类开始查找,而super是从直接父类开始找。

  • 使用细节和注意事项
  1. super的访问不限于直接父类,如果多个父类有同名的成员,使用super遵循就近原则
  2. super和this的比较

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值