面向对象¶
面向对象编程:OOP(Object Oriented Programming)
面向对象的三大特征:
1、封装¶
类里面有属性、方法。
2、继承¶
可以使用之前写的代码。
3、多态¶
可以扩展,使用后来人写的代码。
面向抽象类编程:抽象类,虚函数,抽象函数。
实现多态的3个条件:
- 要有继承
- 要有虚函数重写
- 父类引用,父类指针指向子类对象。
多态的意义¶
多态可扩展机制比复用好的多。复用是别人已经写好的方法 继承。
框架函数。不用改变。改变的是实现。
框架已经提前写好了,实现是后来人写的,框架可以使用后来人写的代码。这就是可扩展。
C++多态 C语言指针,通过地址形参可以改变实参的值。
多态¶
同一种行为,不同的子类呈现出来的状态是不同的。
多态跟属性无关,多态指的是方法的多态。
例:
使用一个动物基类,基类定义一个叫的方法。
猫实现的是喵喵叫、狗实现的是汪汪叫。子类对父类的方法重写。
调用的时候传的是动物基类,定义的时候只需要使用具体的动物类(调用猫是喵喵、调用狗是汪汪)。父类调用子类重写的方法。
接口¶
定义接口,可以调用不同的实现类。也可以实现多态。
继承:子类对父类的继承,提高代码的复用性。“is-a”的关系。
接口:实现类对接口的实现,实现规则。“has-a”的关系。
- 类是类,接口是接口。两个不一样的东西。
- 接口:用interface来表示。定义规则。 实现类:实现接口,实现规则。
- 在JDK1.8之前,接口中的内容:常量、抽象方法。
- 实现类实现接口,利用implements关键字
- 实现类实现接口后,重写接口中定义的抽象方法。
- 接口不能创建对象,需要用接口指向实现类的形式创建对象。(多态的形式)
变量:在内存中开辟内存空间,值可以改。
常量:值不可以改。
有了接口,代码规范性更强。
创建interface文件,定义规则。
public interface Speak {//接口
/*
常量:
它的数值不能改变,一旦给定了值以后就不能更改。
接口中的常量前面的修饰符:public static final
如果在接口中,可以省略public static final
一般定义常量的时候,名字全部大写
*/
/*public static final */int AGE = 18;
/*
抽象方法
在接口中,public abstract可以省略
*/
/*public abstract */void say();
}
实现类,实现规则
//实现类1:
public class Chinese implements Speak {//实现类实现了接口,实现具体的规则
//重写
@Override
public void say() {
System.out.println("你好,干嘛去~~~");
}
}
//实现类2:
public class American implements Speak {
@Override
public void say() {
System.out.println("hi.. hello..");
}
}
public class Test {
public static void main(String[] args) {
//接口不能创建对象
// Speak s = new Speak();
//实现类可以创建对象
Chinese ch = new Chinese();
System.out.println(ch.AGE);//访问常量
ch.say();//调用方法
American a = new American();
System.out.println(a.AGE);
a.say();
//通过接口实现多态
//接口=实现类
Speak s = new Chinese();
System.out.println(s.AGE);
s.say();//表面上调用的是接口的say方法,实际上进入到了实现类的say方法
}
}
面向接口编程,公司里面定义规则,不同的人对接口有不同的实现。