第十二课
1.接口
1.1什么是接口
- 接口(interface),在Java语言中是一个抽象类型, 是抽象方法的集合,接口通常用interface。一个类通过继承接口,来继承接口里的方法。接口并不是类,它们只是类似,但是它们的概念不同。类描述对象的属性和方法,而接口包含类要实现的方法。
- 举个例子: 一个明星,他可以是演员、歌手或者导演,这每个角色都是一个类,需要明星类去继承,但是Java中类之间只支持单继承,这个时候就要用到接口。
- 解决方法: 把每个角色都当作一个接口,让类去实现多个接口,Java 中接口之间可以支持多继承
1.2 接口的语法
- 定义一个接口:
修饰符 interface 接口名{
//1.成员变量: 公共静态常量
public static final 数据类型 常量名(大写) = 值;
//2. 抽象方法
//3.default方法和静态方法(Jdk1.8以后才能使用default方法)
}
//接口的定义
public interface ITest{
public abstract void ×××();
}
public interface ITest1{
public abstract void ××××();
}
//接口的多继承
public interface ITest2 extends ITest,ITestl{
public abstract void ×××××();
}
//创建实现类
public class Test implemerits ITest2{
//重写所有抽象方法
}
- 实现明星的例字:
1.3 抽象类和接口的区别
- 抽象类用abstract修饰,接口使用interface;
- 抽象类只支持单继承,接口可以多继承;
- 抽象类中的成员类量可以是多种类型,接口只能是公共静态常量;
- 抽象类中成员方法可以是普通方法也可以是抽象方法,可以有构造方法
- 接口中可以包含抽象方法和静态方法,Jdk1.8之后也可以定义defaul方法,没有构造方法
2.多态再说明
- 概念 : 多态是一个方法具有多个方法
- 编译时多态: 对象和方法在程序运行之前就是已确定了,执行的时候不会存在动态判断的情况了,这种称为编译时多态,实现方式就是方法重载
- (运行时多态)使用继承: 创建父类、子类,在子类中重写父类方法中的方法。将父类作为形参,子类作为实参,那么执行时根据传入的子类不同执行子类的重写后的方法;
- (运行时多态)使用接口: 接口作形参,实现类作为实参,那么执行时根据传入的实现类不同执行实现类的重写后的方法;
- 优点:
- 可替换性:多态对已存在代码具有可替代性;
- 可扩充性: 增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。
- 接口性: 多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或覆盖它而实现的
- 灵活性: 多态的应用中体现了灵活多样的操作,投升效率;
- 简化性: 对大量对象运算和操作时,这个优点特突出;
3.访问修饰符
1. 作用:
在 Java 中实现信息隐藏的是访问控制权限机制; 访问控制符包括4个: public、protected、缺省和private。
2. 权限:
- public: 全友好 ,不受限制谁都能访问到;
- protected: 同包友好、跨包父子友好,同包可以访问,跨包只有存在父子关系才能访问;
- 缺省: 同包友好,跨包实现类调用接口中的默认方法
- private: 本类友好
- 对类修饰的是public和省缺两个
三大关键字
1.抽象abstract
1.1 一个类中有一个式以上的抽象方法,就必须声明为抽象类
1.2 抽象类中可以具体实现方法,也可以没有抽象方法;
1.3抽象美中的抽象方法必须被子类重写,如果子类不想重写就把子类也定义成抽象类
1.4 抽象类不能直接实例化,但可以用向上转型来调用父类方法
1.5 要想使用抽象类中的方法必须有一个子类继承,并用向上转型调用
2.最终的final
2.1可以用来修饰成员变量、方法及参数 非抽象类 (不能与abstract同时出现)
2.2 final修饰类: 表示不能被继承,没有子类;
2.3 final修方法: 表示不能被重写,但可以被继承
2.4 final修变量: 表示常量,只能赋值一次,不能被修改,变量必须初始化
2.5 不能修饰构造方法
3. 静态的static
class 类{
static int a; //静态变量
static void method(); //静态方法
static{...};//静态块
}
- 修饰成员变量: 它不依赖特定的实例,被类的所有实例共享,在内存中唯一;
2. static 变量和static 方法一般是通过类名直接访问,也可以通过实例来访问;
3. 非静态方法可以调用(访问) 静态方法和变量,但是静态方法,不能访问非静态方法和变量;
4. 静态块: 在程序运行过程中,最早执行 静态代码块里的代码,如果在其它类中调用函有静态代码块的类时,静态代码块也会执行
5. static不能修饰主类以及构造方法
6. 用public修饰的static 变量和static方法,在任何地方都可以通过类名直接来访问,用private修饰的static 变量和static方法,只能在声明的本类方法以及静态块中访问,在静态块中不能用 this访问,this属于非静变量;
4.三个关键字混用:
- static 和 final 同时使用
- 修饰成员变量或方法时,可以理解为"全局常量";
- 对于变量,一但给值就不能修改,并且通过类名可以访问;
- 对于方法,不能重写,可以通过类名访问
- abstract和static
- 不能在一起用,static是需要确定的方法体,而abstract不能有方法体
- abstract和final
- final修饰的方法不能被继承,不能被重写