封装与继承

本章内容介绍

面向对象是一种编程方法,一种编程的思想。

面向对象的编程方法中,有几个核心特性,也是它的优势体现。

**面向对象的三大特性:**封装、继承,多态。(如果面试官问题四大特性,再加上一个抽象)

封装和继承

1. 掌握什么是封装

**一个好的系统:**高内聚、低(松)耦合(功能之间相互独立,没有影响,不会牵一发而动全身)。

世界上没有完美的系统,只有接近完美的系统。

封装的作用(为什么需要封装):

如果没有封装,那么一个类中属性,可能会出现不合理赋值。

便于使用者正确使用系统,防止错误修改属性

有助于系统之间的松耦合,提高系统独立性

提高软件的可重用性

降低了构建大型系统的风险

**封装的定义:**将类的信息隐藏在类的内部,不允许外部程序直接访问,而是通过类提供的公开的便捷的接口来进行访问赋值等。

原则:尽可能多的隐藏信息提供公开的接口来访问。

封装的优势:

  • 便于使用者正确使用系统,防止错误修改属性
  • 有助于系统之间的松耦合,提高系统独立性
  • 提高软件的可重用性
  • 降低了构建大型系统的风险
  • 最好的系统架构是:高内聚、低(松)耦合。

2. 掌握如何使用封装

/**
 * 一个类的封装过程:
 * 	1.属性私有化
 * 	2.提供公共的getter/setter方法
 * 	3.在getter/setter方法中添加控制语句(根据需求)
 * @author Charles7c
 * 2019年1月14日 上午9:55:55
 */
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;
	}
}

3. 包的作用和使用

为什么需要包:

  1. 因为在各个平台系统中,同一个目录下不允许出现同名文件。
  2. 当我们文件(java代码等)越来越多的时候,全都放在一起会显得杂乱,不易管理和查找。有一定规则的包可以解决此问题。
  3. 有助于实施访问权限控制

使用包:

  1. 包名的命名规则:

    1. 所有的字母都小写(大多数场景下)

    2. 采用反域名命名法(公司域名的倒序) 例如:cn.kgc.xxx

    3. 各级包应该有一定的规范:(根据不同公司会有出入)

      一般都是4级包,可能有更多级,根据具体需求来。

      cn :一级包

      kgc :二级包 公司的名称

      项目的名称:三级包

      模块名或者层级名:四级包

      **例如:**com.neteasy.cloudmusic.ui…

  2. 声明包地址

    // 声明包地址的  它必须在文件的有效代码的第一行
    package cn.kgc.demo2;
    
  3. 导入包(Eclipse快速导包:Ctrl+Shift+O)

    // 导包:如果你要使用的类[不再同一个包下] 你就需要将它的地址导入过来
    // 导包的语句必须是在类声明的上方,包声明的下方
    // 语法:import 类的全类名/全路径/全限定名;(它也支持通配符)
    // import java.util.*;
    import java.util.Scanner;
    

    java.lang包下的类,不需要你手动声明,JVM会自动进行加载。

    **例如:**System

  4. 特殊情况

    // 如果在一个类中,出现了使用两个不同包的同名类  必然有一个需要以全类名形式使用
    cn.kgc.demo1.Cat cat = new cn.kgc.demo1.Cat();
    

4. 访问修饰符的使用

**private:**最严格的访问级别,只能在本类中使用。

**什么都不写(默认):**同包之间可以随意访问。

protected:// 一会讲完继承说

**public:**在整个项目都能使用

作用域 修饰符同一个类中同一个包中子类中任何地方
private
默认修饰符
protected
public

**访问修饰符:**可以用来修饰类、修饰属性、修饰方法。

**作用:**为了隐藏某些细节,或者公开某些内容,控制访问权限。

5. static关键字

**static可以修饰变量:**静态变量/类变量

**static也可以修饰方法:**静态方法/类方法

**static也可以修饰代码块:**静态代码块

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

static修饰的类信息等和普通的成员(实例/对象)信息等的区别:

  1. 生命周期不同

    类信息随着类加载而创建

    实例信息随着对象产生而创建

  2. "作用域"不同

    类信息被该类的所有的对象共享,只要有一个对象更改,所有的对象获取的结果都会变化。

    实例信息仅仅被自身对象所使用,不同对象之间的实例信息相互独立存在。

  3. 调用上有所不同

    实例信息必须通过先创建对象,然后才能使用

    类信息,直接可以用类名.的形式调用(当然也可以用对象来调用)

注意事项:

  1. 如果在多个对象之间,有共享的数据,且这个数据不会发生变动,最好定义为静态常量,可以有效提升效率。
static final修饰...
  1. 在类信息中,如果使用实例信息,需要注意先创建对象才能使用。而反之则无所谓。(自己思考谁先出生和谁后出生)
继承的作用

便于复用代码。

将子类中公有的代码,提取出来存储到父类中,到时候用子类继承父类就可以重复使用父类中的代码。

继承的使用

定义父类:

public class Pet{
    // 子类公有的代码
}

定义子类:

public class Dog extends Pet{
    // 子类特有的代码
}

面向对象的三大特性之一就是继承。

Java:单根继承一个子类只能有一个直接父类。(一个人只可能有一个亲爹)

在设计使用继承优化时,尽量符合is a的关系。

**例如:**猫 is a 宠物 学生 is a 人

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值