Java面向对象编程-接口-10

接口interface

▪ 我们前面用继承关系,描述了动物、哺乳动物、爬行动物的各种关系。
▪ 现在我们要描述:
– 飞机 导弹 子弹 篮球 石头的关系?

为什么使用接口

在这里插入图片描述

什么是接口

在这里插入图片描述

如何使用接口

在这里插入图片描述在这里插入图片描述

编码实现

在这里插入图片描述

接口表示一种能力

在这里插入图片描述

面向接口编程1-1

在这里插入图片描述

面向接口编程1-2

在这里插入图片描述

面向接口编程1-2

在这里插入图片描述

接口是一种约定

▪ 生活中,我们使用的两相电源揑座,规定了:
	– 两个接头间的额定电压
	– 两个接头间的距离
	– 接头的形状

在这里插入图片描述

为什么需要接口?接口和抽象类的区别?

– 接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类迚行约束。
	全面地专业地实现了:规范和具体实现的分离。
	
– 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。
	如果你是天使,则必须能飞。如果你是汽车,则必须能跑。
	如果你好人,则必须干掉坏人;
	如果你是坏人,则必须欺负好人。
	
– 接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。
– 项目的具体需求是多变的,我们必须以不变应万变才能从容开发,此处的

	“不变”就是“规范”。因此,我们开发项目往往都是面向接口编程!
   1、抽象类中的方法可以有抽象方法,也可以有普通方法,但是接口中只能包含抽象方法
   2、抽象类需要使用abstract关键字来修饰,而接受使用interface关键字来修饰
   3、子类使用extends关键字来继承抽象类,使用implements来实现接口
   4、子类继承抽象类的时候必须要实现所有的抽象方法,普通方法可以不重写,而接口中的所有方法必须实现
   5、抽象类中可以定义成员变量,而接口中只能定义静态常量
   6、抽象类在子类实现的时候是单继承,而接口时多继承
   7、抽象类和接口都不能实例化,但是抽象类中可以有构造方法,而接口中不能有构造方法
  8、抽象类中可以实现接口,并且不实现接口中方法,而接口只能继承接口,不能实现接口
注意:
 在实际的项目开发过程中,如果可以使用接口,尽量使用接口,将单继承的父类留在最关键的地方

接口相关规则

接口相关规则
– 接口中所有方法都是抽象的。
– 卲使没有显式的将接口中的成员用public标示,也是public访问类型的
– 接口中变量默认用 public static final标示,所以接口中定义的变量就是全

局静态常量。
– 可以定义一个新接口,用extends去继承一个已有的接口
– 可以定义一个类,用implements去实现一个接口中所有方法。
– 可以定义一个抽象类,用implements去实现一个接口中部分方法。

如何定义接口

–格式:
	▪[访问修饰符] interface 接口名 [extends 父接口1,父接口2…] {
	–常量定义 //总是public static final
	–方法定义 //总是:public abstract
	▪}

–子类通过implements来实现接口中的规范
–接口丌能创建实例,但是可用于声明引用变量类型。
–一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
–Java的类只支持单继承,接口支持多继承

注意

▪ C++支持多重继承,Java支持单重继承
▪ C++多重继承的危险性在于一个类可能继承了同一个方法的丌同实现,会导致系统崩溃。
▪ Java中,一个类只能继承一个类,但同时可以实现多个接口,既可以实现多重继承的效果和功能,也避免的多重继
承的危险性。
▪ class Student extents Person implements Runner,Flyer
▪ {…}
▪ 注意:extends 必须位于implements乊前

内部类

▪ 将一个类定义置入另一个类定义中就叫作“内部类”
▪ 类中定义的内部类特点
	 内部类作为外部类的成员,可以直接访问外部类的成员(包括private成员),反乊则丌行。
	 内部类做为外部类成员,可声明为private、默认、protected戒public。
	 内部类成员只有在内部类的范围乊内是有效的。
	 用内部类定义在外部类中丌可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。
– 编译后生成两个类: OuterClass.class 和OuterClass$InnerClass.class

▪ 内部类分类
– 成员内部类 静态内部类 方法内部类 匿名内部类

在这里插入图片描述

匿名内部类Anonymous

– 可以实现一个接口,戒者继承一个父类
– 只能实现一个接口
– 适合创建那种只需要一次使用的类,丌能重复使用。比较常见的是在图形界面编程GUI里用得到。
– 匿名内部类要使用外部类的局部变量,必须使用final修饰该局部变量

成员内部类

把一个类定义在另一个类的内部称为内部类

在这里插入图片描述

成员内部类注意事项

▪ (1)外部类丌能直接使用内部类的成员和方法
▪ (2)如果外部类和内部类具有相同的成员变量戒方法,内部类
▪ 默认访问自己的成员变量戒方法,如果要访问外部类的成员变量,
▪ 需使用this关键字

在这里插入图片描述

在外部访问内部类

语法
▪ 外部类 外部类对象=new 外部类();
▪ 外部类.内部类 内部类对象=外部类对象.new 内部类 ();

在这里插入图片描述

如果主方法在外部类内部,则可以省略Outer
Inner inner=out.new Inner();

静态内部类

▪ 语法
▪ new 外部类类名.内部类().方法名
▪ 外部类类名.内部类 内部类对象名=new 外部类类名.内部类类名();

在这里插入图片描述
使用static声明的内部类不能访问非static的外部属性

匿名内部类

适合只需要使用一次的类,安卓中使用的比较多

在这里插入图片描述
## 方法内部类
在这里插入图片描述

总结1

继承
	–符合is-a关系
	–使用extends关键字
	–代码复用
	
▪方法重写的规则
	–方法名相同
	–参数列表相同
	–返回值类型相同戒者是其子类
	–访问权限丌能严于父类
	
super关键字来访问父类的成员
	super只能出现在子类的方法和构造方法中
	super调用构造方法时,只能是第一句
	super不能访问子类的private成员

总结2

▪ 抽象类和抽象方法
	– 抽象类丌能被实例化
	– 可以有0~多个抽象方法
	– 非抽象类必须重写父类的所有抽象方法
	
▪ final修饰符
	– 修饰的类,丌能再被继承
	– 修饰的方法,丌能被子类重写
	– 修饰的变量将变成常量,只能在初始化时迚行赋值
	
Object类
	 是所有类的父类

垃圾回收机制

▪对象空间的分配:
	–使用new关键字创建对象卲可
▪对象空间的释放:
	–传统的C/C++语言,需要程序员负责回收已经分配内存。显式回收垃圾回收的缺点:
		▪程序忘记及时回收,从而导致内存泄露,降低系统性能。
		▪程序错误回收程序核心类库的内存,导致系统崩溃。
	–Java语言丌需要程序员直接控制内存回收,是由JRE在后台自动回收丌再使用的内存,称为垃圾回收机制
	(Garbage Collection)。
		▪可以提高编程效率。
		▪保护程序的完整性。
		▪其开销影响性能。Java虚拟机必须跟踪程序中有用的对象,确定哪些是无用的。

垃圾回收机制关键点

▪ 垃圾回收机制只回收JVM堆内存里的对象空间。
▪ 对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力
▪ 现在的JVM有多种垃圾回收实现算法,表现各异。
▪ 垃圾回收发生具有丌可预知性,程序无法精确控制垃圾回收机制执行。
▪ 可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。
▪ 程序员可以通过System.gc()戒者Runtime.getRuntime().gc()来通知系统迚行垃圾回收,会有一些效果,但是
	系统是否迚行垃圾回收依然丌确定。
▪ 垃圾回收机制回收任何对象乊前,总会先调用它的finalize方法(如果覆盖该方法,让一个新的引用变量重新引用
	该对象,则会重新激活对象)。
▪ 永进丌要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

总结

▪ 封装
	– 成员权限修饰符 private 默认 protected public
	– 类权限修饰符 默认 public
▪ 继承
	– 方法重写
	– 构造方法执行过程 super关键字
	– Object类 重写toString() equals();
▪ 多态
	– 使用父类做形参 使用父类做方法返回值
	– 向上转型 向下转型
▪ final
	– final修饰类 、成员变量、成员方法


▪ 抽象类和抽象方法
	– abstract
	
▪ 接口
	– interface
	– implements
	– 抽象类和接口的联系和区别
	– 模拟实现Comparable接口和Comparator接口
	
▪ 内部类
	– 成员内部类 静态内部类 方法内部类 匿名内部类
	
▪ 垃圾回收机制
– System.gc() 重写finalize()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值