Java学习笔记之面向对象三大特征

一、封装

定义

封装就是将属性隐藏起来,对于外界不可见。若要访问某个属性,提供公共方法对其访问。如此,可以让代码更加容易理解,同时可以加强代码的安全性。

体现

  1. 方法就是一种封装
  2. 关键字private也是一种封装

步骤

  1. 使用private关键字来修饰成员变量或成员方法,即private 数据类型 变量名;,从而使得成员变量或成员方法只有在本类中访问,超出本类范围则不能直接访问
  2. 对需要访问的成员变量或成员方法,则可以间接访问,即提供对应的setXxx()getXxx()方法。
  3. 对于setXxx()方法,不能有返回值,参数类型和成员变量对应。
  4. 对于getXxx()方法,不能有参数,返回值类型和成员变量对应。
  5. 特殊地,对于基本类型中的boolean值,getXxx()必须写成isXxx()的形式,而setXxx()规则不变
public class Student {
    private int age;
    //专门设置age的数据
    public void setAge(int a) {
        if (a > 0 && a < 100){  //提高了代码的安全性
            age = a;
        }else {
            System.out.println("年龄值输入错误");
        }
    }
    //专门获取age的数据
    public int getAge() {
        return age;
    }
  
   	//对于数据类型布尔值的特殊情况
  	private boolean male;
    public void setMale(boolean m) {
        male = m;
    }
    public boolean isMale() {
        return male;
    }
}

构造方法

  • 定义:专门用来创建对象的方法

    • 通过new关键字创建对象时,就是在调用构造方法
  • 格式:

    public 类名称 (参数类型 参数名称) {
      方法体
    }
    
  • 注意事项

    • 构造方法的名称必须和所在的类名称完全一样,包括大小写
    • 构造方法不要写返回值类型,不写void
    • 构造方法不能return一个具体的返回值
    • 构造方法可以进行重载,即可以定义或不定义参数

标准的类:符合JavaBean规范

  • 组成:
    • 所有成员变量由private关键字修饰
    • 每个成员变量都有get/set方法
    • 有一个无参数的构造方法
    • 有一个全参数的构造方法
  • 编译器IDEA中快速写一个标准的类:
    • 先点击菜单栏中的Code
    • 再点击Code中的Generate
    • 之后根据对应所缺少的组成部分,生成对应组件
    • 当生成无参数的构造方法时,需要选择Select None

二、继承

定义

  • 解决的问题:共性抽取,提高代码的复用性
  • 特点
    • 子类可以拥有父类的内容
    • 子类可以拥有自己特色内容
  • 格式:class 子类 extends 父类

类之间继承的特点

  1. 支持单继承,不支持多继承,即儿子只能有一个父亲。
  2. 支持多重继承,即儿子可以有爸爸,还可以有爷爷。
  3. 子类只有一个父类,但父类可以有多个子类。即允许有兄弟姐妹。

注:接口和接口之间支持单继承,也支持多继承。(接口可以有多个爹)

继承后的问题

  • 成员变量重名
    • 使用super关键字,即 super.成员变量名
    • 直接通过子类对象访问成员变量:等号左边是谁,就优先用,否则向上找
    • 间接通过成员方法访问成员变量:该方法属于谁,就优先用,否则向上找
  • 成员方法重名:覆盖重写(override)
    • 保证父类和子类的方法名称和参数列表都一致,可以用@override写在方法前来检查是否是有效的重写
    • 子类方法的权限修饰符 ≥ 父类方法的权限修饰符 public > protected > (default) > private
    • 子类方法的返回值范围 ≤ 父类方法的返回值范围

this关键字

本类对象的引用,用来访问本类内容

  • 原因:解决成员变量名和setXxx()的形参变量名的重名问题,若重名,会根据「就近原则」优先使用局部变量,导致成员变量被隐藏从而方法调用时不能赋值使用
  • 含义:代表所在类的当前对象的地址值
    • 哪个对象调用方法,方法中的this就代表哪个对象,即通过调用的方法,就是this。
  • 格式:this.成员变量名 this一定是写在方法里面的
public class Student {
    private int age;
    public void setAge(int age) {
      //age = age;  出现成员变量和参数变量的重名问题
      this.age = age;
    }
    public int getAge() {
        return age;
    }

super关键字

父类对象的引用,用来访问父类内容

  • 在子类的成员方法中,访问父类的成员变量/成员方法
  • 在子类的构造方法中,访问父类的构造方法

三、多态

两种形式实现多态:继承和实现

引用类型转换

  1. 对象的向上转型

    父类名称 对象名 = new 子类名称();

    即创建一个子类对象,把它当做父类来看待使用。

  2. 对象的向下转型

    子类名称 对象名 = (子类名称) 父类对象;

    将父类对象,[还原]成为本来的子类对象。

四、修饰符

权限修饰符

修饰符同一个类同一个包(子类与无关类)不同包的子类不同包非子类
private
default
protected
public
  1. 一般成员变量用private修饰。
  2. 一般构造方法用public修饰。
  3. 一般成员方法用public修饰。

状态修饰符

final修饰符

修饰方法:方法不能被重写
修饰基本类型变量:变成常量,不能被赋值
修饰引用类型变量:地址不能改变,地址里面的内容可以改变(可以不建公园,但是可以建商场)
修饰类:类不能被继承(绝种了)

static修饰符

  • 作用:类的多个对象共享同一份数据。
  • 调用格式:类名称.静态变量 类名称.静态方法()
  • 注意事项
    • 静态成员方法只能访问静态方法和静态变量,不能访问非静态。(因为内存先用的静态,后有的非静态。)
    • 静态方法中不能使用this关键字
  • 内存说明:根据类名称访问静态成员变量时候,只和类有关,和对象无关。因为在方法区中有一块独立的空间,叫静态区,专门存储static的数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值