前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Macbook pro/air 2013 late -2014 使用转接卡更换NVME SSD休眠不醒问题的解决办法

Macbook pro/air 2013 late -2014 使用转接卡更换NVME SSD休眠不醒问题的解决办法

作者头像
全栈程序员站长
发布于 2022-09-10 09:30:38
发布于 2022-09-10 09:30:38
3.4K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

2021年1月更新, 发现升级 big sur 11.1之后,固件版本变成了429.0.0.0, 睡眠问题又回来了,每次都睡死,不醒。 于是我按老办法,把mbp114的nvme驱动刷到mpb111的429里,刷完之后,结果,睡眠问题又解决了,真是服了苹果,搞来搞去的。办法就是用ch341a来刷,参考最下面的说明。把文件换成bigsur的nvme驱动就好了。

———我是分隔线—-

Big Sur 出来了,有网友说需要刷回原版固件版本方可升级,我试了一下,升级中间会黑屏死机重启多次, 然后刷回原版也是如此,

但是多次之后,也可以升级到Big Sur,据说下面的跟贴说,原盘的话会升到一个新的固件版本, 我确认了一下我的版本还是153.0.0.0.0, 看来是没有升级成功了,我的硬盘不是原装的,按之前的研究,这个无法升级是合理的,刷回的旧版,休眠问题回来了,mode 25 的情况下,一会就会睡死了。

搞了一个原装的APPLE的SSD, 把Firmware的版本升到了427.0.0.0.0, 休眠问题消失了,不会再睡死了,感谢苹果。

测试了2013-2014的两个MBP都是同样的结果。

据说不需要原装的SSD也有可能升级固件成功,但是不同的牌子不一样的,有机率失败,大家可以试试,欢迎留言返馈。

本文章的原来使用ch341a来夹芯片刷bios的办法可以废弃了,!!!大家只需要把固件升到427就好了!!!!!

同时已经刷过BIOS的网友,如果无法升级固件,请尝试使用编程器恢复原来的没有修改的固件。如果你没有备份的话,又无法升级的话,这个有就比较悲剧了,我也不知道怎么办了,只能试试换个ssd看看,欢迎大家留言交流。

下面介绍,如何升级Bigsur的固件,不使用下面的办法,可以使用全新安装或升级,也是可以刷到固件的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo /usr/sbin/bless -firmware Desktop/Big\ Sur/MBP111.scap --verbose --recovery

新的文件在安装的app的下面的目录:

先mount一下:

Install\ macOS\ Big\ Sur.app/Contents/SharedSupport/SharedSupport.dmg.

然后可以在下面的地方找到 一个zip文件:

/Volumes/Shared\ Support/com_apple_MobileAsset_MacSoftwareUpdate/ee3ab6c04234b360dd8fca93c0ae49f957bf0843.zip

解开这个zip, 就得到了新的firmware了:

ee3ab6c04234b360dd8fca93c0ae49f957bf0843/AssetData/boot/EFI/EFIPayloads

我的2013 late mbp 15, 所以是MBP111.scap

2014的mbp是 MBP112.scap

执行上面的bless的命令,然后关机(不是重启) ,然后马上开机。

这个据说只能在原始的固件才行,修改过补丁的不行。

然后就开机的时候会看到logo和进度条,1-2分钟就可以升级完, 升级完会自动重启一下,然后就进入系统了。

测试了手上另一台mbp 15 2014年的,是原装的硬盘,成功把固件升级到了427.0.0.0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
admin@ADMINdeMacBook-Pro ~ % sudo /usr/sbin/bless -firmware ~/Downloads/MBP112.scap --verbose --recovery 
EFI found at IODeviceTree:/efi
Will need to copy 8523776 bytes to EFI system partition
No auxiliary booter partition required
System partition found
Preferred system partition found: disk0s1
Returning booter information dictionary:
{
    "Auxiliary Partitions" =     (
    );
    "Data Partitions" =     (
        disk1s5
    );
    "Preboot Volumes" =     (
        disk1s2
    );
    "System Partitions" =     (
        disk0s1
    );
}
Mounting at /Volumes/bless.fY7x
Executing "/sbin/mount"
Returned 0
Creating /Volumes/bless.fY7x/EFI/APPLE/FIRMWARE if needed
Deleting previous contents of /Volumes/bless.fY7x/EFI/APPLE/FIRMWARE
Deleting /Volumes/bless.fY7x/EFI/APPLE/FIRMWARE/MBP112.scap (8520304 bytes)
Opened dest at /Volumes/bless.fY7x/EFI/APPLE/FIRMWARE/MBP112.scap for writing
preallocation not supported on this filesystem for /Volumes/bless.fY7x/EFI/APPLE/FIRMWARE/MBP112.scap

/Volumes/bless.fY7x/EFI/APPLE/FIRMWARE/MBP112.scap created successfully
No auxiliary booter partition required
System partition found
Preferred system partition found: disk0s1
Returning booter information dictionary:
{
    "Auxiliary Partitions" =     (
    );
    "Data Partitions" =     (
        disk1s1
    );
    "Preboot Volumes" =     (
        disk1s2
    );
    "System Partitions" =     (
        disk0s1
    );
}
Bad path for boot item: /Users/admin/Downloads/MBP112.scap
Relative path of /Volumes/bless.fY7x/EFI/APPLE/FIRMWARE/MBP112.scap is \EFI\APPLE\FIRMWARE\MBP112.scap
IOMedia disk0s1 has UUID 492ABF07-D827-447A-A506-DA52C7BCA4CF
Executing "/sbin/umount"
Returned 0
Write to RTC: 0
Setting EFI NVRAM:
{
    "efi-apple-recovery" = "<array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>492ABF07-D827-447A-A506-DA52C7BCA4CF</string></dict></dict><key>BLLastBSDName</key><string>disk0s1</string></dict><dict><key>IOEFIDevicePathType</key><string>MediaFilePath</string><key>Path</key><string>\\EFI\\APPLE\\FIRMWARE\\MBP112.scap</string></dict></array>";
}

稍后试一下非原装的升级。

新的Big sur的Macbook pro 的固件我上传了在 https://download.csdn.net/download/aerror/13119980

———–上面这些更新于-2020.11.17—— 我是分割线 —————以下是原文(已废弃,不建议采用),升级big sur就好了,不需要再用编程器这样修改了。 ———

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

1. 手上512GMBP 2013 late 差不多满了,因为穷,所以在淘宝上买了一个NVME转Macbook pcie,然后再买一个NVME 2T的硬盘

2. NVME因为需要最新的Firmware Rom支持,所以必须使用原装的硬盘(必须原装)安装Mac 14以上,我安装了14.5.要不然识别不出来新安装的NVME硬盘

3. 买之前就知道是会有休眠问题的,问了卖家推荐了一些型号说不会的,其中我是买了推荐的HP EX950 2T, 比intel足足贵了700元,结果然并卵,安装完系统测试了一下,发现也是有休眠问题的。测试办法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pmset -a hibernatemode 25
pmset sleepnow 

然后合上盖子,过上几分钟,发现就睡死了。根本醒不过来了。必须强行关机再开机, 确认了多次如此。 估计有人说2013 late的机子可以,可能是默认的hibernatemode 3 ,或者设置了hibernatemode 0, 要不就是插着电源。

同时还有副作用,就是开机会黑屏过10-20秒才看到苹果和进度条,开机速度超慢。

4. 遍查了整个网络,找到了以下的资料:

Background

  • 2013-2014 MacBooks use a non-standard connector (12+16 pins) for the stock SSD that uses PCIe AHCI (OEM drives supposedly based on the Samsung XP941 or SM951)
  • Fortunately, there are a number of M.2 NVMe drives and an adapter available that allow for SSD upgrades in these MacBooks
  • macOS 10.13 “High Sierra” introduced boot support for NVMe drives that use 512 byte sectors (or LBAs) which opens up a variety of NVMe SSD upgrade options (Samsung, Intel, etc)
  • Unfortunately, the stock EFI firmware (or system ROM) in these MacBook comes with an NVMe driver that prevents the MacBook from waking up from hibernation (or deep sleep)
  • To address this hibernation issue, the system ROM can either be modified, or hibernation can be disabled on the MacBook by executing “pmset -a standby 0”
  • 2015 MacBooks can also be upgraded using this guide and do not require firmware modifications or other changes as they presumably all use PCIe NVMe SSDs (like the Samsung PM951 and newer)
  • This guide has been successfully tested with a 13” MacBook Pro Late-2013 and an 11” MacBook Air Mid-2013

证实了,只要是2013-2014的Macbook都会有问题的,任何型号的NVME转接的SSD都有问题,没有例外,原因是固件中的NVME驱动有问题会令到无法唤醒.

参考URLhttps://forums.macrumors.com/threads/upgrading-2013-2014-macbook-pro-ssd-to-m-2-nvme.2034976/page-87

解决办法也给出了,就是使用2015的固件中NVME替换2013-2014的固件驱动,GUID为51116915-C34B-4D8E-86DB-6A70F2E60DAA, 然后使用编程器去先从MX25L6406EMI这芯片读出原来的Rom, 然后从Macos的安装包找出2015的NVME替换好了,再刷回MX25L6406EMI。

文中CH341A编程器淘宝有卖,好便宜,只需要20-30元不等,但是它是使用一个SPI to J6100 adapter,这个查了一下发现淘宝没有,只有ebay上有,韩国卖家,几百块,发货时间还要超长。。。

5. 既然升级系统的时候可以升级固件,那么说明使用软件来刷也是可行的,就是前几天发的文章了,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. get the FirmwareUpdate.pkg file from the OS installer app's installESD.dmg
2. extract the contents using pkgutil --expand /path/to/FirmwareUpdate.pkg <path somewhere else>/FirmwareUpdate
3. in terminal, cd to the Scripts directory inside the expanded FirmwareUpdate pkg directory.
4. with Scripts as your working directory, run these 2 commands, then reboot:
sudo /usr/libexec/FirmwareUpdateLauncher -p "$PWD/Tools"
sudo /usr/libexec/efiupdater -p "$PWD/Tools/EFIPayloads"
5. at the reboot, firmware will be updated if there are any updates to be applied.

测试了一下,固件是可以刷的,但是必须满足以下所有条件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. 使用原装的硬盘

2. 原装的固件

3.固件版本必须大于等于当前的固件的版本

efiupdate只是把文件复制到efi分,然后设置了一些nvram的参数,然后是固件启动的时候从efi的指定地方来更新,但是很明显上面的测试表明了,这个固件的更新之前是有校验的上面三个条件都满足才给刷的,修改了的固件刷不了。

https://apple.stackexchange.com/questions/287644/do-macbooks-support-nvme-ssd-drives-via-the-use-of-a-sintech-adapter

这里人下 Y.H. wong说

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hat guide on MacRumors is really useful. I recently upgraded a 2014 MBPr board using most of its instructions, and it still works. Changes made: 1. No need for kapton tape. 2. I used a Sintech ST-NGFF2013-B. 3. I didn't turn off hibernation with pmset, I didn't buy a CH341A programmer either. I just looked up the MBP112 and MBP114 firmwares, transplanted the NVMe driver from MBP114 to MBP112, and flashed my Mac with /usr/libexec/efiupdater -p /path/to/EFIPayloads --force-update. Wakeup problem completely gone.Y.H Wong Nov 4 '18 at 13:00
@Y.HWong: Sounds like the easiest way to flash the firmware. Can you tell in more detail how you proceeded? May be even join the discussion at MacRumors. Thanks a lot! – Bernhard Fürst Feb 6 at 19:20

不知道他是怎么做到的,始终无法把修改后的固件成功刷上去,有点怀疑他可能是没有测试清楚 。

6. 没有办法了,看到intel是有一个fpt.efi(Flash proramming tool)的,可以在Uefi的shell下执行来刷UEFI的BIOS/固件,但是只是对于PC的,工具和文档参考https://github.com/holoto/efi_shell_flash_bios/

于是安装了refind,然后从clover那里找了一个shellx64.efi放到/EFI/tools/shell.efi下,然后下载了fpt.efi也放到这里,然后运气并不好,fpt.efi无法识别SPI的设备.

但是发现安装refind解决了一些问题:

1.启动不会黑屏20秒左右了,马上就可以启动看到启动菜单,把超时设置为0的话,马上就可以看到苹果和进度条了。

2.唤醒虽然还是有问题,但是表现有些不一样,唤醒的时候不会直接黑屏卡死,而是可以看到refind的启动菜单,然后自动重启,然后再重启开机,这个其实也还好,至少不需要手动长按关机再开机那么烦了。

这个两个问题的解决,我认为问题应该不只是固件的问题,还和启动的efi有关系,然后翻查了一下refind的文档,发现它在原装的硬件中唤醒表现竟然是和我的机器的表现是一致的,就是唤醒变成了自动重启两次。

新的希望又有了,看来唤醒这个只是refind没有做好,在白苹果还有一个选择就是refit这个工具,虽然很久没有更新了,但是工作方式有些不同,它是直接安装在系统盘的根目录的,而不是EFI的分区中,也没有使用nvram的变量。 据查在白苹里使用它是没有休眼唤醒的问题的。于是把refind删除了,安装了refit, 然而也是没有走到狗屎运. :(

7. 好好的查了一下mx25L6406EMI-12G的datasheet, 知道它是8 SOP封装的,问了做硬件的朋友,他说其实可以焊几条线来用刷,但是不想动手电烙铁,上次拆硬盘的bios是拆得满头大汗,折腾许久,最后竟然还没有成功,所以有点信心不足. 于是在淘宝上再试试找那个连接线,也是没有找到,但是发现有一个sop 8的夹子,研究一下买家的评论图片,都是用来刷路由器,刷笔记本的,看来是一个可行,价格便宜又可以快速达成的办法。 于是拍了ch341a+夹子+一堆转接1.8v之类的一整套回来,花了50元左右,第二天就收到了。

8. 买ch341a没有说明书, 我汗,看到有一个跳线写着3.3V5V的,从https://static6.arrow.com/aropdfconversion/cb5c77c505104f4e4cad1b3667abe88327b4ee44/mx25l6406e203v2064mb20v1.9.pdf

先下载datasheet确认了这个mx25L6406EMI是3.3V的,然后小心翼翼用万用表量了一个8号脚是3.3V的, 然后把跳线插在编程那个两个脚上(板上好在有提示),

夹子夹了第一次没有夹好,读不出来,夹第二次好了,测试一下,可以读, 一切正常, 两个红灯都亮起来了,如图:

按上面的https://forums.macrumors.com/threads/upgrading-2013-2014-macbook-pro-ssd-to-m-2-nvme.2034976/page-87

一步一步都做,最后成功刷入固件。 开机问题好了,使用pmset -a hibernatemode 25来测试,唤醒问题也好了。

一切完美解决。

应要求补充一下翻译过来的操作步骤:

1. 打开后盖,主板上找mx25L6406EMI-12G这个芯片,是8只脚的,写了mx25L6406EMI这些字在上面的, 照图夹好BIOS, 红线对齐第一只脚(芯片上有一个圆点标记的)

2. 安装flash rom 工具,使用brew安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 brew install flashrom  

3. 开始读出原来的 bios ROM ,这个大小是8M的。输入以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
flashrom -p ch341a_spi -r dump1.bin -c "MX25L6406E/MX25L6408E"

保险起见,执行3次,每次改改名,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
flashrom -p ch341a_spi -r dump2.bin -c "MX25L6406E/MX25L6408E"
flashrom -p ch341a_spi -r dump3.bin -c "MX25L6406E/MX25L6408E"

然后可以md5看看hash是不是一致的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
md5 *.bin

要是读不出,或者是三次不一致,应该是没有夹好,重新夹一下。

在读数据的时候,这个ch341a的红灯会亮起来

4. 从升级/安装包解压出2015的MBP固件中的NVME驱动

2013-2014 MacBook Pro (MacBookPro11,1), 用MacBookPro11,4 的 firmware

2013-2014 MacBook Air (MacBookAir6,1),用 MacBookAir7,1的 firmware

4.1 双击装载 InstallESD.dmg , 在macOS安装包的Contents/SharedSupport目录下.

4.2 在InstallESD.dmg image, 找到 Packages/FirmwareUpdate.pkg 这个安装包

4.3 用Pacifist或The Archive Browser 打开 the FirmwareUpdate.pkg

4.4 打开Scripts

4.5 从Tools/EFIPayloads 这里解压合适的firmware.

MBA71_0177_B00.fd 是2015 MacBook Air

MBP114_0183_B00.fd 是 2015 MacBook Pro

4.6 上面的操作使用命令行也是可以,我是使用命令行来操作的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xar -x Packages/FirmwareUpdate.pkg
cat Scripts | cpio -i 

5. 修改dump1.bin 中的NVME驱动

5.1 用UEFITool 打开2015的固件,找到这个驱动,有查找菜单的,找GUID为 51116915-C34B-4D8E-86DB-6A70F2E60DAA 的就是了。

5.2 右键 “Extract as is…” 把2015的驱动保存下来.

5.3 使用5.2这时保存下来的驱动去替换dump下来的rom里的nvme驱动,也是定位那个GUID,然后右键 “replace aS IS ….”

5.4 替换的动作可以在UEFITool的界面如下图看到,保存这个文件为MBA71_0117_B00-Mod.rom ,

5.5 可以再次打开这个修改后的文件,可以对比一下这个rom的驱动和2015的firmware中的驱动的信息是不是一致的。

如果一致的,那么你这一步成功修改了你机器定制的rom了。

6. 使用flashrom 把修改后的rom写入bios芯片里, flashrom写完之后会自己校验的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 flashrom -p ch341a_spi -w MBA71_0117_B00-Mod.rom -c "MX25L6406E/MX25L6408E"

写完之后,拔出USB的ch341a编程,夹子松开移走,开机,应该一切都是完美的了,可以看到开机马上就看到进度条了,而不是原来的卡上个几十秒,可以使用上面说的方法测试休眠唤醒。

祝好运.

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149731.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Java的学习笔记(11)对象 六
方法名必须相同 参数列表必须相同 修饰符:范围可以扩大,范围可以扩大不能缩小:public>protected>default>private 抛出异常:范围可以被缩小但是不能扩大;classNotFoundException -->Exception(大) 重写,子类的方法和父类的方法一致;方法体不同
卢衍飞
2023/02/13
1880
【Java 学习】:抽象类&接口
💢💢在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。
IsLand1314
2024/10/15
1730
【Java 学习】:抽象类&接口
java上转型和下转型(对象的多态性)
/*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类。 *在调用方法的时候,上转型对象只能调用父类中有的方法,如果调用子类的方法则会报错 *下转型:是父类向下强制转换到子类对象 *前提是该父类对象必须是经过上转型的对象。 * *代码示例:*/
用户3030674
2018/09/14
2.3K1
Java基础-封装、继承、多态
Java是一门面向对象非常好的语言,拥有面向对象的三个基本特征:封装、继承、多态。
越陌度阡
2024/05/24
1.1K0
Java基础-封装、继承、多态
Java面向对象三大特性(封装、继承、多态)
OOP 语言:也就是面向对象编程。 面向对象的语言有三大特性:封装、继承、多态。三大特性是面向对象编程的核心。下面就来介绍一下面向对象的三大特性。 如果想了解面向对象可以看一下这一篇博客类和对象
全栈程序员站长
2022/09/17
3450
Java面向对象三大特性(封装、继承、多态)
Java 面向对象
概述:对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
星姮十织
2021/12/25
9020
Java的学习笔记(10)对象 五
Java中只有单继承,没有多继承。“一个爸爸有多个儿子,一个儿子只有爸爸”: Object——>Persion
卢衍飞
2023/02/13
1420
一篇文章让你掌握多态
多态的概念呢比较简单,就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
TestOps
2022/04/07
1920
一篇文章让你掌握多态
java面向对象编程知识小结(一)
Java是一种面向对象的编程语言。面向对象编程,英文是Object-Oriented Programming,简称OOP。面向对象编程,是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方法。
魚迹
2023/05/06
2120
java面向对象编程知识小结(一)
Java基础入门笔记05——面向对象,创建对象的内存分析,继承,封装,多态,object类,this&&super,方法重写,引用类型的强制转换,instanceof,抽象类,内部类,接口,异常。[通
1.使用new关键字创建对象,该类必须要有构造器 2.构造器用来实例化属性(给属性赋初值)
全栈程序员站长
2022/09/21
1K0
Java基础入门笔记05——面向对象,创建对象的内存分析,继承,封装,多态,object类,this&&super,方法重写,引用类型的强制转换,instanceof,抽象类,内部类,接口,异常。[通
Java核心-面向对象(中)
前一篇简单聊了一下类、对象,还有方法的相关定义和操作,现在来介绍一下面向对象的三大特性:封装、继承和多态。本次内容是我们学习的核心和重点。
reload
2024/01/20
2660
Java核心-面向对象(中)
java学习之路:25.类的继承,Object类,对象类型转换,instanceo关键字
类是可以继承的,在java中使用extends关键字类标识两个类的继承关系。 例如下面的图:
花狗Fdog
2020/10/28
6000
java学习之路:25.类的继承,Object类,对象类型转换,instanceo关键字
详解Java三大特性——多态
现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
苏先生
2019/05/07
3700
详解Java三大特性——多态
第五节:详细讲解Java中的接口与继承
大家好,我是 Vic,今天给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢
达达前端
2019/07/03
4130
Java复习【知识改变命运】第六章
1.区别相同名的类 2.当类很多时候更好的管理[API文档] 3.控制访问范围
用户11319080
2024/10/17
880
Java复习【知识改变命运】第六章
Java多态(上)
向上转型、隐式转型、自动转型:子类对象转型为父类对象,可以调用子类重写父类的方法以及父类派生的方法,无法调用子类独有的方法
Breeze.
2022/04/11
5550
Java多态(上)
Java基础(多态的理解与应用)
定义格式:父类类型 变量名=new 子类类型();
全栈程序员站长
2022/09/08
5160
Java基础-面向对象(四)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/11/12
2870
JavaSE(二)之继承、封装、多态
学习完类与对象终于认识到什么是类,什么是对象了。接下来要看的就是java的三大特征:继承、封装、多态。 一、封装(数据的隐藏) 在定义一个对象的特性的时候,有必要决定这些特性的可见性,即哪些特性对外部是可见的,哪些特性用于表示内部状态。 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。 1.1、封装的步骤           1).使用private 修饰需要封装的成员变量。          2.)提供一个公开的方法设置或者访问私有的属性             
用户1195962
2018/01/18
7790
你是真的了解多态吗?谈谈你对多态的了解以及应用
现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。
Java学习
2018/07/25
4590
你是真的了解多态吗?谈谈你对多态的了解以及应用
推荐阅读
相关推荐
Java的学习笔记(11)对象 六
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档