课程笔记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
​ 成员方法 使用 public

2、什么时候采用 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版)相关推荐

  1. 面向对象-封装、继承、多态

    面向对象-封装.继承.多态 面向对象-封装 一.封装: private 数据类型 _名字;   --成员变量 public 默认一致 名字 属性 {  get{ return _名字; }  set{ ...

  2. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...

  3. JavaScript(JS) 面向对象(封装、继承、多态)

    面向对象是把事物给对象化,包括其属性和行为.面向对象编程更贴近实际生活的思想.可以简单的理解面向对象的底层还是面向过程,面向过程抽象成类,然后封装,方便使用就是面向对象.本文主要介绍JavaScrip ...

  4. PHP的面向对象 — 封装、继承、多态

    K在上一次的基础篇中给大家介绍了一下关于PHP中数组和字符串的使用方法等,这一次,K决定一次性大放送,给大家分享一下PHP中面向对象的三大特性:封装.继承.多态三个方面的知识. 一.封装 在PHP中, ...

  5. Java面向对象封装和继承

    面向对象 什么是面向过程.面向对象? 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考"我该怎么做",然后一步步实现的过程. ...

  6. Java面向对象封装和继承,阿里正式启动2021届春季校招

    封装,它也是面向对象思想的特征之一.面向对象共有三个特征:封装,继承,多态.接下来我们具体学习封装. 封装的表现: 1.方法就是一个最基本封装体. 2.类其实也是一个封装体. 从以上两点得出结论,封装 ...

  7. Educoder- 《JAVA从小白到大牛》(第二章)2-3 Java面向对象 - 封装、继承和多态的综合练习

    提示:本文章为个人学习记录,仅供参考学习,禁止转载,支持交流与讨论. 文章目录 第1关:通关任务一 任务描述 相关知识 面向对象思想 封装 继承 `super()`和`this()` 编程要求 测试说 ...

  8. Java面向对象 - 封装、继承和多态的综合练习

    面向对象的三个基本特征: 封装,就是把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息隐藏.隐藏实现细节,使得代码模块化. 继承,可以使用现有类的所有功能 ...

  9. Java面向对象 - 封装、继承和多态

    简介 面向对象的三个基本特征是:封装.继承和多态. 封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类).封装和继承的目的都是:代码重用.而多态则是为了实现另一个目的 -- 接口重 ...

  10. 头歌实践实践教学平台:Java面向对象 - 封装、继承和多态的综合练习

    第1关:封装.继承和多态进阶(一) 任务描述 本关任务:按要求编写一个Java应用程序,巩固Java面向对象知识. 相关知识 为了完成本关任务,我们回顾一下前面所学知识:1.面向对象思想 :2.封装: ...

最新文章

  1. ML基石_LinearModelsForClassfication
  2. LIVE 预告 | 哈工大微软:多任务、多语言、多模态的预训练模型 | CVPR21系列
  3. Git 只拉取部分文件
  4. 十年IT运维谈(二)“0”和“100”
  5. pandas 合并所有列_图解Python表格操作包Pandas
  6. arduino 蓝牙示例_Arduino简单实例之八_蓝牙模块
  7. 这让全场的chinaakd
  8. 数据结构之排序算法:内部排序算法的应用与比较
  9. block创建时出现Typedef redefinition with different types错误
  10. mysql进程删除文件_完全卸载mysql 停止服务、卸载相关程序、删除注册表
  11. NFS客户端挂载目录后无写入权限的解决方案
  12. python指定返回类型_如何在python中指定方法返回类型列表 - python
  13. strike F1 to retry boot,F2 for setup utility
  14. Java中 intValue,parseInt,Valueof 这三个关键字的区别
  15. android彻底退出应用_Android完全退出应用程序的方法
  16. WordPress默认头像修改方法汇总
  17. HTB-Blocky
  18. 集线器,路由器,交换机之间的区别
  19. 无法从计算机验证正在安装驱动,intel CPU集显驱动失败,无法为此计算机验证正在安装的驱动程序...
  20. ICP、ICP备案、ICP证是什么意思?有什么区别和联系?

热门文章

  1. iOS设置静音模式播放声音以及注意点
  2. Hexo站点建设之——基于Lighthouse查看网站性能
  3. 华宝证券围绕智能交易战略实现华宝智投条件单、小T自动交易机器人、打新机器人、定投机器人等智能交易模块
  4. NTRK融合突变致癌机理详解
  5. C# 保留两位“有效数字”,而不是两位“小数”
  6. 高斯分布的乘积与卷积
  7. 基于Unity3D(UGUI)的背包系统(装备系统,锻造系统,购买系统)
  8. CocosCreator游戏热更新完整教程,超简单,超详细
  9. 服务器硬件知识普及篇之服务器主板
  10. 服务器硬件知识普及篇(需要配置服务器的朋友可以参考)