目录
一 类
类:就是 具有相同的属性和功能 的对象 的抽象集合
实例:就是一个真实的对象
实例化就是创建对象的过程
二 构造方法
构造方法:是为了对类进行初始化
使用new 关键字来创建对象的时候,就是在调用构造方法
package com.qing.demo.bean;
public class Cat {
private String name;
public Cat() {
System.out.println("我是无参构造方法");
}
public Cat(String name) {
this.name = name;
System.out.println("我是有参构造方法");
}
public String getName() {
return name;
}
}
测试类
@Test
void test1() {
//等号右边的 new后面的Cat()其实就是构造方法
//构造方法:是为了对类进行初始化
Cat jiafei = new Cat();
Cat yingduan = new Cat("灰蓝");
System.out.println("英短猫的名字是"+yingduan.getName());
}
控制台
三 方法重载
方法重载:使得可以创建同名的多个方法(参数类型或参数个数必须要有所不同)
目的:提供了函数可扩展的能力(在不改变原方法的基础上,新增功能)
如下:方法重载需要参数类型或参数个数有所不同,跟参数变量名无关
四 修饰符
为什么有时候使用修饰符public,有时候使用private?
这就好像我们的房子,我们不希望房子是全透明的,那样你在家里的所有活动都被看得清清楚楚,毫无隐私。
我们的房子一般是有门有窗,但更多的是不透明的墙,门和窗其实就是public,而房子内的东西其实就是private。
五 封装
每个对象都包括它能进行操作的所有信息(这个对象不必依赖其他对象来完成自己的操作)
封装的好处
1 良好的封装能减少耦合
2 类内部可以自由修改
3 类具有清晰的对外接口(比如public修饰的属性和方法)
封装 就是我们房间内所有的摆设都可以随意的改变而不用影响他人。
封装对象暴露在外的属性和方法(门窗),可以流通空气、带来阳光、供人进出。
六 继承
继承代表了 is a 的关系
如果两个对象A和B,可以描述为B是A,则表明B可以继承A
比如 猫是哺乳动物,猫可以继承哺乳动物。
继承者还可以理解为被继承者的特殊化
继承者除了具备被继承者的特性外,还具备自己独有的个性。
比如 猫除了有哺乳动物的 胎生、哺乳特点,猫还可以抓老鼠,可以爬树。
如果子类继承于父类
1 子类拥有父类非private的属性和功能
2 子类具有自己的属性和功能(子类可以扩展父类没有的属性和功能)
3 子类还可以用自己的方式实现父类的功能(方法重写)
继承的优点
把子类所有公共的部分放在父类,使代码得到了共享,避免了重复。
继承的缺点
父类变,子类不得不变。
七 多态
猫和狗都是动物,动物会叫,但猫和狗的叫声是不一样的。
Cat和Dog都继承Animal ,Animal 里有方法jiao(),Cat和Dog各自重写jiao()方法,当animal调用jiao()方法时,叫声就不一样,这就是多态。
测试代码
Animal animal1 = new Cat();
Animal animal2 = new Dog();
animal1.jiao();
animal2.jiao();
结果
八 抽象类
把实例化没有意义的父类 可以改为抽象类
把方法体没有意义的方法改为 抽象方法
注意点
1 抽象类不能被实例化
2 抽象方法是必须被子类重写的方法
3 如果类中包括抽象方法,那么类就必须定义为抽象类
可以考虑让抽象类拥有尽可能多的共同代码,拥有尽可能少的数据。
抽象类通常代表一个抽象概念,它提供一个继承出发点。
当设计一个新的抽象类时,一定是用来继承的。
所以,在一个以继承关系形成的结构里,树枝节点应该是抽象类,树叶节点应该是具体类。
九 接口
注意点
实现接口的类就必须实现接口中所有方法
接口中的方法不能有修饰符(接口中所有方法都是默认 public abstract)
一个类可以实现多个接口
接口的概念可以让用户和其他开发人员更容易理解其他人的代码
接口的名字,前面要加一个大写字母I
接口和抽象类的区别
1 一个类只能继承一个抽象类,但可以实现多个接口
2 抽象类里可以有抽象方法,也可以有不抽象的方法;接口中所有方法都是抽象的;
3 类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象。
如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,使用继承抽象类。比如飞机、鸟、超人是完全不相关的类,但都具有飞的行为,此时让他们实现相同的飞行接口即可。
实现接口和继承抽象类并不冲突。从设计的角度讲,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类。
而接口是根本不知子类的存在的,方法如何实现还不确定,预先定义了。抽象类是自底而上抽象出来的,接口是自顶向下设计出来的。