面向对象 -- 封装与继承(B版)
课程笔记Day09
- 封装
- 权限修饰符
- 继承
- final 关键字
第一章 封装
第01节 基础理论
面向对象三大特性
1. 封装性
2. 继承性
3. 多态性
什么是封装呢?
类的封装
封装就是对 一些属性和行为的包装。将属性和行为包装成为类。通过创建对象的方式,去使用属性和行为。生活实例:有一个名字叫旺财的事物,他有3岁,可以看家,可以吃肉,还可以卖萌,还可以溜。那么我们将这种 属性和行为封装成为狗。使用狗的对象,就可以完成上面的操作(旺财、3岁、看家、卖萌....)
方法封装
我们将一些常用的写法,常用的逻辑,封装成为一个方法,直接调用方法就可以了。
例如:如果我们对于数组的循环遍历,操作比较多。这种情况下,我们就可以将数组的循环遍历,封装成为方法。
系统提供了一个方法 Arrays.toString(数组名称); 这里 toString()方法当中的细节,不让你看到,直接丢参数,得到结果就可以。
属性封装
有时候,我们需要将属性(成员变量)隐藏起来,不让外界访问,这种情况下可以使用 private 关键字。
这里如果采用 private 去修饰成员变量,外界是不能直接访问的。这也是属性封装的一种体现。
第02节 private封装
案例代码
学生类
//学生类
public class Student {String name;private int age;//构造方法public Student(String name, int age) {this.name = name;if(age>=0 && age < 400) {this.age = age;}}public void show(){System.out.println("name = " + name);System.out.println("age = " + age);}
}
学生类
//测试类
public class Test {public static void main(String[] args) {//创建对象//Student stu = new Student();//stu.name = "赵兴哲";//stu.age = -20;Student stu = new Student("赵兴哲",-20);stu.show();}
}
效果图
第03节 JavaBean
理论说明
JavaBean 是类的一种标准写法:包含有 1. 成员变量 private修饰2. 成员方法 getXxx 和 setXxx 3. 构造方法 无参数构造方法 和 全参数构造方法快捷键:在代码区域,右键选择 Gener... 生成构造方法 Con... 生成 getter And setter
案例代码
手机类
//手机类
public class Phone {//成员变量private String brand;private int price;public Phone() {}public Phone(String brand, int price) {this.brand = brand;this.price = price;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}
}
测试类
//测试类
public class Test {public static void main(String[] args) {//使用方式一:无参数构造+setXxx 赋值 getXxx取值Phone one = new Phone();one.setBrand("华为P40");one.setPrice(8000);String brand1 = one.getBrand();int price1 = one.getPrice();System.out.println("brand1 = " + brand1);System.out.println("price1 = " + price1);//使用方式二:全参数构造 赋值 getXxx取值Phone two = new Phone("小米8S",4000);String brand2 = two.getBrand();int price2 = two.getPrice();System.out.println("brand2 = " + brand2);System.out.println("price2 = " + price2);}
}
第二章 权限修饰符
第01节 基础理论
权限修饰符是什么意思呢?
权限修饰符就是指明 类、方法、变量。他们的作用范围。 在什么地方可使用到他们。例如: 变量1. 在不同的包当中,想要去使用变量,应该使用什么权限修饰符?2. 在同一个包,不同类当中,想要去使用变量,应该使用什么权限修饰符?3. 在不同的包,但是属于父子类关系,可以使用什么权限修饰符?4. 只能在同一个类当中,应该使用什么权限修饰符?小结:权限修饰符干嘛用的?解决在不同位置,访问权限的问题。
常用的权限修饰符有哪些呢?(从大到小)
1. public 公共的 【使用较多】
2. protected 受保护的
3. 不写 默认的
4. private 私有的 【使用较多】
第02节 不同修饰符
public 公共的 | protected 受保护的 | 不写 默认的 | private 私有的 | |
---|---|---|---|---|
不同包,不同类(陌生人) | YES | NO | NO | NO |
不同包,子类(我儿子) | YES | YES | NO | NO |
同一个包,非子类(我邻居) | YES | YES | YES | NO |
同一个包,同一个类(我自己) | YES | YES | YES | YES |
小结: 重点是 public 和 private
1、什么时候采用 public ?
类使用 public
构造方法 使用 public
成员方法 使用 public2、什么时候采用 private ?
成员变量 使用 private
单例模式和工具类的 构造方法 使用 private
第三章 继承
第01节 继承的格式
格式
class 父类名称{}class 子类名称 extends 父类名称{}
案例
小结
继承有什么作用呢?
向上抽取共性,提高代码的复用性。(大白话:偷懒的一种思想)
第02节 成员变量特点
案例代码
父类
//父类
public class FuLei {String name = "王健林";int ageFu = 60;
}
子类:
//子类
public class ZiLei extends FuLei{String name = "王思聪";int ageZi = 30;public void show(){String name = "熊猫TV";System.out.println(name); //熊猫TVSystem.out.println(this.name); //王思聪System.out.println(super.name); //王健林}
}
测试类
//目标:继承当中,成员变量的特点
public class Test {public static void main(String[] args) {//创建子类的对象,调用成员变量ZiLei zi = new ZiLei();System.out.println(zi.ageFu); // 60System.out.println(zi.ageZi); // 30System.out.println(zi.name); //王思聪//规则: 成员变量,看等号左边,左边是谁,优先使用谁,没有则向上找System.out.println("---------");zi.show();}
}//如果在子类方法当中,想要去访问变量。遵循的是"就近原则"
//就近原则:谁离我近,我就优先使用谁。
//如果想要打破就近原则,则需要使用关键字 this 和 super
//如果采用的是 this.变量名称 则表示 本类成员变量
//如果采用的是 super.变量名称 则表示 父类成员变量
效果图
第03节 成员方法特点
案例代码
父类
//父类
public class FuLei {public void methodFu(){System.out.println("父类不同方法");}public void show(){System.out.println("父类相同方法");}
}
子类
//子类
public class ZiLei extends FuLei{public void methodZi(){System.out.println("子类不同方法");}public void show(){System.out.println("子类相同方法");}public void function(){this.show(); //子类相同方法super.show(); //父类相同方法}
}
测试类
public class Test {public static void main(String[] args) {//创建子类的对象,调用方法ZiLei zi = new ZiLei();zi.methodFu(); //父类不同方法zi.methodZi(); //子类不同方法zi.show(); //子类相同方法//规则:成员方法看等号右边,等号右边是谁,则优先使用谁,没有就向上找System.out.println("-----");zi.function();}
}
第04节 方法重写
基础理论
1. 什么是方法重写呢?在父子关系当中,出现了子类方法和父类方法,声明相同的情况。(方法名称相同,参数列表相同,返回值相同)2. 两个易混淆的概念:A. 方法重载: 同一个类,同名方法,参数不同。(参数的类型不同,参数的顺序不同,参数的个数不同)B. 方法重写: 父子关系,相同方法。(出现在两个类当中的方法)3. 方法重写有什么作用呢?当父类方法无法完全满足,现有子类需求的情况下,我们就可以在子类当中,对父类方法进行重写,满足现有的儿子需求。
效果图
案例代码
手机类 父类
//手机类
public class Phone {public void call(){System.out.println("显示号码");}
}
新手机类 子类
//新款手机
public class NewPhoe extends Phone{//注解 Override 表示检查是否是正确的方法重写@Overridepublic void call(){super.call();System.out.println("显示头像");System.out.println("显示名称");}
}
测试类
//测试类
public class Test {public static void main(String[] args) {//创建子类的对象NewPhoe np = new NewPhoe();//调用方法np.call();}
}//显示号码
//显示头像
//显示名称//方法重写的应用场景:
//当父类方法无法满足现有子类需求的时候,在子类当中,选择方法重写
//经典的场景就是 升级工作
注意事项
一大一小:一大:子类的权限修饰符 >= 父类权限修饰符 【父类私有方法,不能被重写】
一小:子类的返回值类型 <= 父类的返回值类型 class Integer extends Number extends Object{ ... }
第05节 构造方法特点
基础理论
1. 继承当中,构造方法的访问特点是什么?在创建子类对象的时候,优先执行父类构造,再去执行子类构造。2. 原因是什么呢?因为在子类当中,可能会使用到父类的成员变量,必须先帮父类初始化成员变量。3. 注意事项:在任何一个构造方法的第一行都是 super(); 不写的时候,系统会默认赠送一个给你。如果写了 super(参数) 或者是 this(参数) 系统将不再赠送 super();目的是为了让你访问父类的构造方法。
案例代码
父类
//父类
public class FuLei {private String name;private int age;public FuLei() {}public FuLei(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
子类
//子类
public class ZiLei extends FuLei {private String gender;public ZiLei() {}public ZiLei(String name, int age, String gender) {super(name, age);this.gender = gender;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}
}
测试类
//测试类
public class Test {public static void main(String[] args) {//创建子类对象ZiLei zi = new ZiLei("定浩",18,"女");//获取值String name = zi.getName();int age = zi.getAge();String gender = zi.getGender();System.out.println("name = " + name);System.out.println("age = " + age);System.out.println("gender = " + gender);}
}
第06节 继承的特点
继承特点
单一继承,多层继承。单一继承: 一个类只能有一个直接父类。(只能有一个亲爹)
多层继承: 一个类除了有一个亲爹外,还可以有亲爷爷。(有爹有爷)
画图说明
第07节 两个关键字
基础理论
1. thisA. 含义:当前对象的引用B. 用法:a. 成员变量 this.变量名称b. 成员方法 this.方法名称(参数);c. 构造方法 this(参数);2. superA. 含义:当前对象的父类引用B. 用法:a. 成员变量 super.变量名称b. 成员方法 super.方法名称(参数);c. 构造方法 super(参数);
画图说明
第四章 final关键字
第01节 基础理论
final 关键字的含义:final 翻译成为中文: 最终的、最后的。不可以改变的。final 有什么作用呢?A. 修饰类: 表示的是最终的类。没有子类,下面所有的方法,都不可以被重写。B. 修饰方法:表示的是最终的方法。这个方法不可以被重写。C. 修饰变量:表示的是当前的变量,值不可以改变。是常量。
第02节 案例代码
final 修饰类的情况
例如:我们java当中的字符串类 String 就是被 final 修饰。字符串没有子类,所有的方法都不可以被重写。
final修饰方法的情况
如果后期:想要实现当前类里面 某个方法不要被重写,其他的方法,还是可以被重写的情况。
这里就可以将 该方法,设置 final 修饰,其他方法还是可以被重写的。
final 修饰变量的情况
修饰的是 基本数据类型,如果是基本数据类型,表示的是 值不能变。
修饰的是 引用数据类型,如果是引用数据类型,表示的是 地址值 不能变。
第四章 final关键字
第01节 基础理论
final 关键字的含义:final 翻译成为中文: 最终的、最后的。不可以改变的。final 有什么作用呢?A. 修饰类: 表示的是最终的类。没有子类,下面所有的方法,都不可以被重写。B. 修饰方法:表示的是最终的方法。这个方法不可以被重写。C. 修饰变量:表示的是当前的变量,值不可以改变。是常量。
第02节 案例代码
final 修饰类的情况
例如:我们java当中的字符串类 String 就是被 final 修饰。字符串没有子类,所有的方法都不可以被重写。
final修饰方法的情况
如果后期:想要实现当前类里面 某个方法不要被重写,其他的方法,还是可以被重写的情况。
这里就可以将 该方法,设置 final 修饰,其他方法还是可以被重写的。
final 修饰变量的情况
修饰的是 基本数据类型,如果是基本数据类型,表示的是 值不能变。
修饰的是 引用数据类型,如果是引用数据类型,表示的是 地址值 不能变。
面向对象 -- 封装与继承(B版)相关推荐
- 面向对象-封装、继承、多态
面向对象-封装.继承.多态 面向对象-封装 一.封装: private 数据类型 _名字; --成员变量 public 默认一致 名字 属性 { get{ return _名字; } set{ ...
- Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...
- JavaScript(JS) 面向对象(封装、继承、多态)
面向对象是把事物给对象化,包括其属性和行为.面向对象编程更贴近实际生活的思想.可以简单的理解面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象.本文主要介绍JavaScrip ...
- PHP的面向对象 — 封装、继承、多态
K在上一次的基础篇中给大家介绍了一下关于PHP中数组和字符串的使用方法等,这一次,K决定一次性大放送,给大家分享一下PHP中面向对象的三大特性:封装.继承.多态三个方面的知识. 一.封装 在PHP中, ...
- Java面向对象封装和继承
面向对象 什么是面向过程.面向对象? 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考"我该怎么做",然后一步步实现的过程. ...
- Java面向对象封装和继承,阿里正式启动2021届春季校招
封装,它也是面向对象思想的特征之一.面向对象共有三个特征:封装,继承,多态.接下来我们具体学习封装. 封装的表现: 1.方法就是一个最基本封装体. 2.类其实也是一个封装体. 从以上两点得出结论,封装 ...
- Educoder- 《JAVA从小白到大牛》(第二章)2-3 Java面向对象 - 封装、继承和多态的综合练习
提示:本文章为个人学习记录,仅供参考学习,禁止转载,支持交流与讨论. 文章目录 第1关:通关任务一 任务描述 相关知识 面向对象思想 封装 继承 `super()`和`this()` 编程要求 测试说 ...
- Java面向对象 - 封装、继承和多态的综合练习
面向对象的三个基本特征: 封装,就是把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息隐藏.隐藏实现细节,使得代码模块化. 继承,可以使用现有类的所有功能 ...
- Java面向对象 - 封装、继承和多态
简介 面向对象的三个基本特征是:封装.继承和多态. 封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类).封装和继承的目的都是:代码重用.而多态则是为了实现另一个目的 -- 接口重 ...
- 头歌实践实践教学平台:Java面向对象 - 封装、继承和多态的综合练习
第1关:封装.继承和多态进阶(一) 任务描述 本关任务:按要求编写一个Java应用程序,巩固Java面向对象知识. 相关知识 为了完成本关任务,我们回顾一下前面所学知识:1.面向对象思想 :2.封装: ...
最新文章
- ML基石_LinearModelsForClassfication
- LIVE 预告 | 哈工大微软:多任务、多语言、多模态的预训练模型 | CVPR21系列
- Git 只拉取部分文件
- 十年IT运维谈(二)“0”和“100”
- pandas 合并所有列_图解Python表格操作包Pandas
- arduino 蓝牙示例_Arduino简单实例之八_蓝牙模块
- 这让全场的chinaakd
- 数据结构之排序算法:内部排序算法的应用与比较
- block创建时出现Typedef redefinition with different types错误
- mysql进程删除文件_完全卸载mysql 停止服务、卸载相关程序、删除注册表
- NFS客户端挂载目录后无写入权限的解决方案
- python指定返回类型_如何在python中指定方法返回类型列表 - python
- strike F1 to retry boot,F2 for setup utility
- Java中 intValue,parseInt,Valueof 这三个关键字的区别
- android彻底退出应用_Android完全退出应用程序的方法
- WordPress默认头像修改方法汇总
- HTB-Blocky
- 集线器,路由器,交换机之间的区别
- 无法从计算机验证正在安装驱动,intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序...
- ICP、ICP备案、ICP证是什么意思?有什么区别和联系?
热门文章
- iOS设置静音模式播放声音以及注意点
- Hexo站点建设之——基于Lighthouse查看网站性能
- 华宝证券围绕智能交易战略实现华宝智投条件单、小T自动交易机器人、打新机器人、定投机器人等智能交易模块
- NTRK融合突变致癌机理详解
- C# 保留两位“有效数字”,而不是两位“小数”
- 高斯分布的乘积与卷积
- 基于Unity3D(UGUI)的背包系统(装备系统,锻造系统,购买系统)
- CocosCreator游戏热更新完整教程,超简单,超详细
- 服务器硬件知识普及篇之服务器主板
- 服务器硬件知识普及篇(需要配置服务器的朋友可以参考)