第十一课:封装和继承

第十一课:封装和继承
一、本章内容介绍
1.面向对象是一种编程方法,一种编程的思想
2.面向对象的编程方法中,有几个核心特性,也是它的优势体现
*3.面向对象的三大特性:封装、继承、多态(如果面试官问题四大特性,再加上一个抽象)

二、掌握什么是封装
1.一个好的系统:高内聚、低(松)耦合(功能之间相互独立,没有影响,不会牵一发而
动全身)
•世界上没有完美的系统,只有接近完美的系统
2.封装的作用(为什么需要封装):
⑴如果没有封装,防止错误修改属性
⑵便于使用者正确使用系统,防止错误修改属性
⑶有助于系统之间的松耦合,提高系统独立性
⑷提高软件的可重用性
⑸降低了构建大型系统的风险
3.封装的定义:将类的信息隐藏在类的内部,不允许外部程序直接访问,而是通过类提供
的公开的便捷的接口来进行访问赋值等
4.原则: 尽可能多的隐藏信息,提供公开的接口 来访问

三、掌握如何使用封装
/**
*一个类的封装过程:
*1.属性私有化
*2.提供公共的getter/setter方法
*3.在getter/setter方法中添加控制语句(根据需求)
*@author Raymond
*2019年2月11日 上午3:30:35
*/
public class Monkey{

   // 1.属性私有化-隐藏类信息 除了自己这个类 其他的外部类都无法直接访问
   private String name;
   private int health;
   private int love;
   
   // 2.提供公共的getter/setter方法-用于外部访问操作(便捷的接口)
   // name的setter方法
   public void setName(String name){
       this.name = name;
   }
   // name的getter方法
   public String getName(){
       return this.name;
   }
   
   public int getHealth(){
       return health;
   }
   // 3.根据你的【实际需求】  去对应的getter/setter方法中添加控制语句
   public void setHealth(int health){
       if(health < 0 || health > 100){
           System.out.println(“健康值非法!已经设置为默认值60!”)
           this.health = 60;
       }else{
           this.health = health;
       }
   }
   
   public int getLove(){
       return love;
   }
   public void setLove(int love){
       this.love = love;
   }

}

四、包的作用和使用
1.为什么需要包:
⑴因为在各个平台系统中,同一个目录下不允许出现同名文件
⑵当我们文件(java代码等)越来越多的时候,全都放在一起会显得杂乱,不易管理和
查找 有一定规则的包可以解决此问题
⑶有助于实施访问权限控制
2.使用包:
包名的命名规则:
①所有的字母都小写(大多数场景下)
②采用 反域名 命名法(公司域名的倒序) 例如:cn.kgc.xxx
③各级包应该有一定的规范:(根据不同公司会有出入)
•一般都是四级包,可能有更多级,根据具体需求来
•cn:一级包
•kgc:二级包 公司的名称
•项目的名称:三级包
•模块名或者层级名:四级包
例如:com.neteasy.cloudmusic.ui…
⑵声明包地址
// 声明包地址的 它必须在文件的有效代码的第一行
package cn.kgc.demo2;
⑶导入包(Eclipse快速导包: Ctrl+Shift+O)
// 导包:如果你要使用的类[不在同一个包下] 你就需要将它的地址导入过来
// 导包的语句必须是在类声明的上方,包声明的下方
// 语法:import 类的全名/全路径/全限定名;(它也支持通配符)
// import java.util.
;
import java.util.Scanner;
•java.lang包下的类,不需要你手动声明,JVM会自动进行加载
例如:System
⑷特殊情况
/
如果在一个类中,出现了使用两个不同包的同类名 必然有一个需要以全类名形
式使用*/
cn.kgc.demo1.Cat cat = new cn.kgc.demo1.Cat();

五、访问修饰符的使用
1.private:最严格的访问级别,只能在本类中使用
2.什么都不写(默认):同包之间可以随意访问
3.protected://一会讲完继承说
4.public:在整个项目中都能使用
5.修饰符作用域:
作用域 修饰符 同一个类中 同一个包中 子类中 任何地方
private √
默认修饰符 √ √
protected √ √ √
public √ √ √ √

6.访问修饰符:可以用来修饰类、修饰属性、修饰方法
7.作用:为了隐藏某些细节,或者公开某些内容,控制访问权限

六、static关键字
1.static可以修饰变量:静态变量/类变量
2.static也可以修饰方法:静态方法/类方法
3.static也可以修饰代码块:静态代码块

 public class Dog{
     // 成员代码块/构造代码块/非静态代码块:会随着对象的创建而执行里面的代码片段(创建一次对象就执行一次)它优先于构造方法执行
     {
     
     }
     
     // 静态代码块:会随着类的加载而执行里面的代码片段(只会执行一次)
     static{
     
     }
 }

4.static修饰的类信息等和普通的成员(实例/对象)信息等的区别:
⑴生命周期不同
①类信息随着类加载而创建
②实例信息随着对象产生而创建
⑵“作用域”不同
①类信息被该类的所有的对象共享,只要有一个对象更改,所有的对象获取的结果都
会变化
②实例信息仅仅被自身对象所使用,不同对象之间的实例信息相互独立存在
⑶调用上有所不同
①实例信息必须通过先创建对象,然后才能使用
②类信息,直接可以用 类名. 的形式调用(当然也可以用对象来调用)
5.注意事项:
⑴如果在多个对象之间,有共享的数据,且这个数据不会发生变动,最好定义为静态常
量,可以有效提升效率
static final修饰…
⑵在类信息中,如果使用实例信息,需要注意先创建对象才能使用 而反之则无所谓(自
己思考谁先出生和谁后出生)

七、继承的作用和使用
1.继承的作用
⑴便于复用代码
⑵将子类中公有的代码,提取出来存储到父类中,到时候用子类继承父类就可以重复使
用父类中的代码
2.继承的使用
⑴定义父类:
public class Pet{
// 子类公有的代码
}
⑵定义子类:
public class Dog extends Pet{
// 子类特有的代码
}
⑶面向对象的三大特性之一就是继承
•Java:单根继承,一个子类只能有一个父亲(一个人只可能有一个亲爹)
•在设计使用继承优化时,尽量符合 is a 的关系
例如:猫 is a 宠物 学生 is a 人

八、理解继承
1.父类不是所有的内容都能被子类所继承
⑴父类私有的(private修饰的)不能被继承
⑵父类的构造方法不能被继承
⑶如果父类和子类不是在同一个包中,那么 父类中的默认修饰符修饰的内容 不能被继

2.访问修饰符\访问权限:
•protected:受保护的 在不同包中 只要是有子父类继承关系 那么在子类中就可以
访问信息
访问修饰符\访问受限 在同一个类中 在同一个包中 在子类中 在项目任何位置
private √
默认修饰符 √ √
protected √ √ √
public √ √ √ √

3.执行流程的特点:(构造的执行流程:经常出现在笔试题中)
⑴子类的构造方法中,如果没有显示的去调用父类的构造或者调用自己的其他构造
那么:系统会默认调用 父类的无参构造 (默认有super()调用)
public Dog(){
super();
}
4.super关键字:
⑴this和super的区别:
①this:当前对象 谁在调用这个方法谁就是对象
•this(); // 调用自己的构造
•this.方法(); // 调用自己的方法
•this.成员变量(); // 调用自己的属性
②super:父类的对象 谁是它的父类,这个对象就属于谁
•super(); // 调用父类的构造
•super.方法(); // 调用父类的方法
•super.成员变量(); // 调用父类的属性
⑵如果子类在构造中,显示的去调用了父类的某个构造
那么:系统就会去执行对应的构造,而不再执行默认的无参构造
public Dog(){
super(“xxxx”);
}
⑶如果子类在构造中,显示去调用了自己的某个构造
那么:系统就会先去执行你自己的那个构造,而那个构造中也会根据上两条情况去
执行对应的父类构造
public Dog(){
this(“xxx”);
}
public Dog(String name){
super(); // 和上两条一致
// …
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值