包、封装、继承、super、重写与重载

1.包、软件包(含控制访问修饰符表)

包(package)的本质就是不同的文件夹

包的作用:

  • 可在不同包,放相同的类

  • 更好的管理类

  • 控制访问范围


包的命名规则

  • 只能由字母、下划线、小圆点构成
  • 数字不开头
  • 不可使用保留字、关键字命名

包的导入

导入包用Import,尽量用到哪个函数就导入哪个类,而不是导入全部包。

package 后面接类当前所在的包,而且必须放在类的最上面,只有一句

import在类定义之前就行,可以有多句


后面四种关系是看该变量是在哪个类里定义的,与其本身变量所处类无关。

访问级别访问控制修饰符同类同包子类不同包
公开public
保护protected×
默认××
私有private×××

2.封装

作用:隐藏实现细节、对数据进行验证、代码复用


封装实现步骤

  1. 将属性私有化private
  2. 提供公共方法public,的set,或get(在别的类定义的该类变量无法访问privarte属性,但是可以访问该类的public类型的函数,而该类的类型函数是属于他自己类里的,所以虽然不能通过变量.属性方法直接访问、修改对应属性,但是可以通过访问public类型的函数简介修改、访问私有属性)
package fengzhuang;

public class Account
{
   private String name;
   private String pasw;
   private double salary;
    public Account(String name,String pasw,double salary) //构造函数赋初值
    {
        setName(name);
        setPasw(pasw);
        setSalary(salary);
        disp();
    }
    public void setName(String name)		//public函数访问私有属性
    {
        if(name.length() >= 2 && name.length() <= 4)
        this.name = name;
        else
        {
            System.out.println("输入长度有误(2~4位字符):设置默认值为张三");
            this.name = "张三";
        }
    }

    public void setPasw(String pasw)	//public函数访问私有属性
    {
        if(pasw.length() == 6)
        this.pasw = pasw;
        else
        {
            System.out.println("密码位数错误(6位),默认值设为123456");
            this.pasw = "123456";
        }
    }

    public void setSalary(double salary)	//public函数访问私有属性
    {
        if(salary >= 20)
        this.salary = salary;
        else
        {
            System.out.println("金额太少(至少为20),设置默认值为20");
            this.salary = 20;
        }
    }
    public void disp()	//public函数访问私有属性
    {
        System.out.println("用户信息为:\n姓名 : " + this.name + "\n密码 : " +
                this.pasw + "\n余额 : " + salary);
    }

}


3.继承

定义方法:class + 子类 + extends + 父类名

父类一般定义的是子类的共有属性、方法


注意细节:

  1. 子类继承了父类所有的属性和方法,但是子类不可直接访问父类的私有成员,必须通过public方法访问
  2. 在调用子类的构造函数时,首先要调用父类的构造函数,没有构造父类,那么子类也无法构造,有先后顺序
  3. 调用子类构造函数时,无论子类调用有参构造函数还是无参构造函数,都会默认调用父类的无参构造函数super()。
  4. 如果父类没有无参构造函数,那么必须在子类写明super(参数),调用父类有参构造函数。因为父类自定义构造函数时,默认的构造函数会被覆盖
  5. super使用时必须放在构造函数的第一行
  6. super和this都是只能放在构造函数第一行,因此两者不可同时出现在同一构造函数内
  7. object类是所有类的父类,一般是默认隐藏(ctrl + h显示继承关系)
  8. 父类构造函数调用并不只限于直接父类,若父类没有该属性和函数,将跳过父类再向上依次寻找,但是若父类有该属性但是是private,则直接报错,停止查找
  9. 子类只能继承一个父类
  10. 构造时是先父后子(子构造第一行默认调用无参父构造),调用同名方法、属性时则是就近原则,先子后父

4 super

super是当前子类的父类(不仅仅是直接父类)的类引用

继承访问步骤:

  1. 子类调用函数时,直接使用cal()等价于this.call()。都是从当前子类开始寻找,若子类有相应方法则直接调用子类方法不再向上查找

  2. 子类调用函数时,若子类没有该方法,则一直向其父类逐个查找,知道找到相应方法,或者到object类,返回查找失败。

  3. 子类调用函数时,若父类有该方法,但是子类无权访问。即private父类方法,则会报错,停止查找。

  4. super.call()是从子类的父类开始向上查找,子类有此方法也不调用


5 重写/覆盖

使用细则:

  1. 子类的函数的参数、函数名称与父类完全一样
  2. 父类的返回类型与子类一样或者包含子类
  3. 父类访问权限应该小于等于子类的访问权限(public > protected >默认 > private)

6重载与重写的比较
名称作用范围函数名称参数列表返回类型修饰符
重载一个类之中一样类型、个数、顺序至少有一个不同无要求无要求
重写父类与子类之间一样一样父类返回类型等于或包含子类父类访问权限不大于子类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值