Java学习-Day10(包、访问修饰符、继承、super、重写)

包的三大作用:

  1. 区分相同名字的类
  2. 当类很多时,可以很好的管理类
  3. 控制访问范围

包基本语法:

package com.wanlaizhou

  1. package 关键字,表示打包
  2. com.wanlaizhou 表示包名

包的本质分析(原理)

包的本质就是创建不同的文件夹/目录来保存类文件

包的命名:

  1. 命名规则:

    只能包含数字、字母、下划线、小圆点,但不能以数字开头不能是关键字或保留字

  2. 命名规范:

    小写字母+小圆点一般是

    com.公司名.项目名.业务模块名

    如:com.sina.crm.user

常用的包:

java.lang.* //lang包是基本包,默认引入,不需要再引入

java.util.* //util包,系统提供的工具包,工具类,使用Scanner

java.net.* //网络包,网络开发

java.awt.* //是做java的界面开发,GUI

如何引入包:

语法:

import 包;

import java.util.*; //导入整个包

import java.util.Scanner; //导入Scanner类

建议需要哪个类就导入哪个类,不建议整个导入

注意事项和细节:

  • package的作用是声明当前类所在的包,需要放在类或者文件的最上面,一个类中最多只有

    一句package

  • import 指令 位置放在package的下面,在类定义前面,可以有多句且没有顺序要求

访问修饰符

java提供四种访问控制符修饰符号,用于控制方法和属性的访问权限

  1. 公开级别:public,对外公开
  2. 受保护级别:protected,对子类和同一个包中的类公开
  3. 默认级别:没有修饰符号,向同一个包的类公开
  4. 私有级别:private,只有类本身可以访问,不公开
访问级别访问控制修饰符同类同包子类不同包
1公开public
2受保护protected×
3默认没有修饰符××
4私有private×××

注意事项

  1. 修饰符可以用来修饰类中的属性、成员方法以及类
  2. 只有默认的和public才能修饰类,并且遵循上述访问权限的特点
  3. 继承特性后续补充
  4. 成员方法的访问规则和属性完全一样

面向对象编程三大特征

封装

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

好处:

  1. 隐藏实现的细节:方法(连接数据库)<–调用(传入参数)
  2. 可以对数据进行验证,保证安全合理

实现步骤:

  1. 进行属性私有化private(不能直接修改属性)
  2. 提供一个公共的(public)set方法,用于对属性判断并赋值
  3. 提供一个公共的(public)get方法,用于获取属性的值

构造器中调用set()、get()方法,可以保持数据验证,否则set()方法的验证会失效

class Person {
    public int age;

    public Person(int age) {
        this.age = age;
    }
    
    public void setAge(int age) {
        if (age >= 1 && age <= 120) {
            this.age = age;
        } else {
            System.out.println("输入年龄范围不对,已置为18");
            this.age = 18;
        }
    }

}

继承

代码复用性

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

继承的语法

class 子类 extends 父类{
    
}
//1、子类会自动拥有父类定义的属性和方法(暂不考虑私有)
//2、父类(基类、超类)
//3、子类(派生类)

继承带来的便利:

  1. 代码的复用性提高了
  2. 代码的扩展性和维护性提高了

继承的细节:

  1. 子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问;但是私有属性和方法不能在子类直接访问,要通过父类提供的公共的方法去访问

  2. 子类必须父类的构造器,完成父类的初始化

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

  4. 如果希望指定去调用父类的某个构造器,则显示地调用一下

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

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

  7. java所有类都是Object类(相当于女娲)的子类,Object类是所有类的基类

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

  9. 子类最多只能继承一个父类(指直接继承)即java中是单继承机制

    如何让A类继承B类和C类?

    B继承C,A继承B

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

继承本质详解:

class Grandpa{
    String name = "Grandpa";
    int age = 60;
}
class Father{
    String name = "Father";
    int age = 39;
}
class Son{
    String name = "Son";
}
/*
若Father类中,age属性变为私有,
Son son = new Son();
此时去调用son.age,会报错,而不会访问到Grandpa类的age属性
*/

在这里插入图片描述

super关键字

  • super代表父类的引用,用于访问父类的属性、方法、构造器
  • 基本语法:
    • 访问父类的属性,但不能访问父类的私有属性
    • 访问父类的方法,但不能访问父类的私有方法 super.方法名(参数列表)
    • 访问父类的构造器,super(参数列表),只能放在构造器的第一句
  • super带来的便利/细节
    1. 调用父类构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)
    2. 当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super,如果没有重名,使用super、this、直接访问是一样的效果(this和直接访问是先查找本类,再找父类,super是直接查找父类)
    3. super不限于直接父类,可以使用super去访问父类的父类。如果多个基类中都有同名的成员,遵循就近原则,当然也要遵循访问权限

super 和this 的比较:

在这里插入图片描述

方法重写/覆盖 (override)

  • 子类有一个方法和父类的某个方法的名称、返回类型、参数一样,那么就说子类的方法覆盖了父类的方法

  • 注意事项/细节

    1. 子类方法的参数、方法名要和父类方法的参数、方法名完全一样

    2. 子类方法的返回类型和父类方法的返回类型一样,或者是父类方法返回类型的子类

    3. 子类方法不能缩小父类方法的访问权限

      public > protected > 默认 > private

重载和重写:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晚来舟Mango

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

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

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

打赏作者

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

抵扣说明:

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

余额充值