封装和继承
01.类
(1)什么是类
- 类将现实世界中的概念模拟到计算机程序中
- 是一组具有相同属性和行为的事物的集合,本质还是一种数据类型,类是抽象的
- 类的概念
类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
(2 )如何创建类
- 类的构成
类是由抽象出的属性和行为组成的对一种实物的描述,
实物的属性是类的成员变量,实物的行为是类的方法。
1 创建一个Test类
2 声明一个变量,name
3 声明一个方法,remidnd()
02.对象
(1)什么是对象
具体的事物,真实存在的实体,能描述出他的具体的属性
- 对象的概念
现实世界中任何物体都能被当作是对象,不过在正常开发的时候通常只是在一定的范围去考虑和认识与系统相关的事物并用系统中对象抽象的表示他们
(2)创建对象
- 创建和引用对象
使用对象的步骤
创建对象
类名 对象名 = new 类名();
Test t =new Test();
引用对象成员:使用“.“进行以下操作
引用类的属性:对象名.属性
t.name ="王工"; //给name属性赋值
t.remind(); //调用此方法
(3)类和对象之间的关系
类是物体属性和行为的模板
对象是物体的具体实现
03.封装
(1)什么是封装
- 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
- 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
- 要访问该类的代码和数据,必须通过严格的接口控制。
(2)封装的作用
- 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
- 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性
(3)封装的优点
1 减少耦合
良好的封装能够减少耦合,提高系统独立性
2 可重用性
封装重复代码,提高软件的可重用性
3 精确控制
可以对成员变量进行更精确的控制
4 安全性
隐藏信息,实现细节,降低了构建大型系统的风险
(4)实现封装的步骤
第一步
修改属性的可见性来限制对属性的访问
第二步
对每个值属性提供对外访问的方法
创建一对取赋值方法
第三步
实现封装
public class Person{
private String name;
private int age;
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age= age;
}
}
(5)修饰符分类
访问修饰符:
* 1 private: 私有的,只能在本类中访问
* 2 default: 默认的,只能在本包中访问 (同一个文件夹中)
* 3 protected: 受保护的,只能在本包中访问,子类可以访问
* 4 public: 公共的,都可以访问
非访问修饰符:
* static: 静态的,修饰成员变量和成员方法的。static修饰的成员变量和成员方法,不能直接调用非静态的成员变量和成员方法
* final: 最终的,修饰类,修饰成员变量,修饰成员方法
* 修饰类: 不能被继承
* 修饰成员变量: 不能被修改,赋值一次
* 修饰成员方法: 不能被重写
(6)访问权限
04.继承
(1)继承的概念
- 含义:子类继承父类,可以直接使用父类的属性和方法(主要使用方法)
- 关系:类与类之间的关系
- 父类:有时候也会叫做 超类、基类。
- 关键字:extents
- 一般在什么时候使用:
一般一个小的类和大的类之间这样使用 - 好处:
减少的代码的冗余,提高了代码的复用性 - 特点:
1.子类可以继承父类非private的属性和方法
2.子类可以拥有自己特有的属性和方法,既子类可以对父类进行扩展
3.java类的继承是单继承,但是可以多重继承
4.子类可以 重写 父类的方法 - 优点:
1.提高代码的复用性
子类中重复的代码只需要在父类中写一遍,所有子类都可以应用
2.提高代码的可维护性
只需要修改父类属性和方法,所有的子类都会应用
3.提高类与类之间的关联性,为多态做基础
其实这也是继承的缺点,增加了类和类之间的耦合度,耦合度的增加意味着后期扩展性的降低-
关键字:this与super
1.子类的构造方法(无参与有参)里面,第一句默认添加super(),如果要手动添加,也必须放在第一位-
补充:构造方法:
1.当一个类 没有构造 方法的时候,系统会默认给该类添加一个无参构造方法
2.当一个类 构造 了有参构造方法时,系统不会默认给该类添加无参构造方法 -
this与super的区别:
1.this代表本类对象的引用
this理解一个代词,就是创建对象的对象本身,new的那个对象)
“我”吃桃子(谁吃桃子,这个“我”是谁)
super代表父类对象
2.属性和方法都是对象调用的,那么this和super都可以调用方法 -
补充: 同一个类里面 静态 > 代码块 > 构造方法
子父类里面:父类静态>子类静态>父类代码块>父类构造方法> 子类代码块>子类造方法
类创建要比对象早,static是属于类的,不属于对象
在静态的里面不要调用非静态的,也不要用this与super
-
-
- 一般在什么时候使用:
(2)继承的作用
- 子类拥有父类的属性和方法,减少重复的代码,维护性高。
- 代码简洁,提高了代码的复用性。
(3)继承的关键字
- class——定义类
- interface——定义接口
- extends——继承父类
- implements——实现接口
(4)继承的特性
- 子类拥有父类非 private 的属性、方法
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
- 子类可以用自己的方式实现父类的方法
- 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)
- Java 的继承是单继承,但是可以多代继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性
05.包
(1)包的概念
- 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间
(2)包的作用
一、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用
二、如同文件夹一样,包也采用了树形目录的存储方式。
同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,
当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。
因此,包可以避免名字冲突。
三、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
- 关键字:
import:导入包,告诉下面的代码我要使用哪个包的哪个类
package:告诉我们当前的类属于哪个包
完整的类名:
全限定类名
(3)如何导入包
01.语法
import 包名.类名
02.用 import 关键字引入,使用通配符 ""
import java.util.; //导入java.util包中所有类import
03.使用 import 关键字引入指定包中的指定类
import cn.world.animals; //animals指包中的animals类
(4)使用包的注意事项
- 一个类同时引用了两个来自不同包的同名类
必须通过完整类名来区分
为确保规范,包名必须全小写,由域名倒置
如:baidu.com,则包名为com.baidu
- package和import的顺序是固定的
- package必须位于第一行(忽略注释行)
- 只允许有一个package语句
- 其次是import
- 接着是类的声明