快速掌握【封装和继承】(细节怪)

一、封装

面向对象编程的三个核心知识

  • 封装
  • 继承
  • 多态

1.1 什么是封装?

生活中的封装有: 快递封装,将物品封装空间里面

那代码的封装是什么呢?
  • 方法算是封装

  • 类的封装

    • 主要指的对属性封装

1.2 为什么封装?

那为什么要封装呢?它的作用是什么呢?

  • 快递为例: 封装可以方便传输

  • 类的封装:

    • 可以封装在方法内,可以再方法内实现复杂的逻辑
    • 总结: 隐藏实现的细节,对外提供一些访问的方式

1.3 如何封装?

两大步骤

  • 属性私有 --> private修饰属性
  • 提供setXxx,getXxx方法

特殊的,set get方法是固定写法,一定是setXxx getXxx,Xxx是属性名

封装手机类

public class Phone {

    private String brand;// 品牌
    /**
     * private 私有的
     * 一旦被private修饰的属性,方法只能在本类中调用
     */
    private double price;// 价钱

    public void setBrand(String brand){
        this.brand = brand;
    }

    public String getBrand() {
        return brand;
    }

    // 设计方法,给价钱赋值
    public void setPrice(double price){
        if (price > 0) {
            this.price = price;
        } else {
            System.out.println("设置价钱有误!" );
            this.price = 999999999;
        }

    }

    // 设计方法,能获取属性值
    public double getPrice() {
        return price;
    }

    public void play() {
        System.out.println(price+"元,手机玩游戏");
    }

}

二、继承

2.1 什么是继承

  • 生活中: 孩子继承父辈的财产(物品),继承后孩子就可以使用

  • 代码中: 子类 继承 父类,子类就可以使用父类的属性和方法

关键字

extends


2.2 为什么要继承

  • 代码减少重复,提供代码复用性
  • 是多态的前提

2.3 如何写继承

  • 在类声明上,使用extends声明要继承的类,如下
public class A extends B{

}

以上,就是继承,读作: A类继承B类,其中A类是子类,B类是父类


特殊的:

  • java的继承是单继承, 即一个类只能继承一个父类
  • 支持层次继承,A类继承B类,B类继承C类,A对象可以调用C对象中的属性和方法
父类Animal
public class Animal {

    int age;
    String name;

    void eat() {
        System.out.println("吃东西");
    }

}
子类Dog
/* Dog类是子类
 * Animal是父类
 */
public class Dog extends Animal{

}
测试
public class TestExtends {

    public static void main(String[] args) {
        Dog dog = new Dog( );// Dog是继承Animal
        
        int age = dog.age;// 调用父类的属性
        System.out.println("age = " + age);
        
        dog.eat();// 调用父类的方法
    }
}

2.4 继承中属性问题

子类可以使用父类的非私有属性,无法使用父类私有的属性

在这里插入图片描述



子类中可以定义自己特有的属性,自己对象可以调用

但是,父类对象无法向下使用子类中的属性

在这里插入图片描述



2.5 继承中方法问题

子类对象可以调用父类中非私有的方法,私有方法无法调用

image-20240527110953500



子类中可以定义自己特有的方法,自己调用

父类对象是无法向下调用子类中的方法

image-20240527110441098



子类中有与父类一样的方法 —> 重写!!

在这里插入图片描述

2.6 继承中构造方法问题

继承中,创建子类时,
  • 会先创建父类对象,将父类属性初始化
  • 后再创建子类对象

这也解释了,子类对象为什么可以使用父类属性,因为父类对象创建了,属性初始化了,子类才可以直接使用


那么,子类创建对象时,是如何调用父类构造,创建父类对象的呢??

  • 因为在构造方法的第一行有默认隐藏的super()在调用父类构造,创建父类对象

ps: 关于super的问题,详情请看第四章笔记…

2.7 总结

  • 子类继承父类,使用extends
  • 继承后,子类能使用父类非私有的属性和方法
  • 子类和父类方法有重复—> 重写
  • 继承后,父类不能子类任何东西
  • 继承时,先创建父类对象,再创建子类对象
    • super

三、重写

什么是重写?
  • 重写是在继承的时候,子类重写父类的方法.

  • 就是父类有一个方法,子类又重新定义一个一模一样的方法,叫做重写,又叫覆写(Override)

重写的要求:
  • 子父类重写的方法 访问修饰符一样
    • 特殊的: 子类访问修饰符 >= 父类的
  • 子父类重写的方法 返回值类型一样
  • 子父类重写的方法 方法名一样
  • 子父类重写的方法 参数列表一样
  • 子父类重写的方法 方法体不一样!!!
为什么子类要重写父类方法???
  • 这些父类中的方法确实是需要的,且是共性的
  • 但是父类执行的效果不理想,不适合子类 . 需要每个子类重写以满足自身的需求(情况)
  • 总结: 父类方法不适合子类,所以子类需要重写!

四、this和super

前面说: 创建子类对象时,会先创建父类对象,再创建子类对象

为什么?
  • 是因为java语法设计,在构造方法第一行默认隐藏有个super() 调用父类的无参构造
super是什么?
  • super是代表父类对象
super能干什么?
  • 作用1: super(),调用父类无参构造 ; super(参数)调用父类有参数的构造方法
  • 作用2: super代表父类对象,调用父类的属性和方法
    • super.属性
    • super.方法()
this和super
thissuper
含义代表当前类对象代表父类对象
属性this.属性; (调用当前类属性,
如果自己没有也可以调用父类的属性)
supe.属性;只能调用父类属性
方法this.方法(); (调用当前类方法,
如果自己没有方法也可以调用父类的方法)
super.方法();只能调用父类方法
构造方法this(); 调用自己的无参构造
this(参数); 调用的是自己的有参构造
super();调用父类无参构造
super(参数);调用父类有参构造

五、有父类时对象创建的过程

有父类时对象创建的过程,

  • 先创建父类对象
  • 在创建子类对象
  • 在每个类创建对象时都先属性初始化再执行构造

在这里插入图片描述
在这里插入图片描述



六、访问修饰符

  • 访问修饰符,又叫访问限制符,控制符

  • 访问就是调用

  • 修饰符/限制符/控制符 , 即控制能否调用

访问修饰符,主要是用来修饰

  • 方法
  • 属性

哪些修饰符

  • public
  • protected
  • 缺省/默认
  • private
当前类同包下其他类中不同包的子类不同包非子类
public
protected父类不能调用,子类可以调用×
缺省××
private×××

访问权限范围从大到小:public > protected > 缺省 > private

一般情况下,实战中最常见是public和private


最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值