【Java总结】-【入门篇(第四周)】 后续每周总结一次
JAVA接口、内部类、常用类
一、JAVA接口
1.1 什么是接口?:
- 接口相当于特殊的抽象类,定义方式、组成部分于抽象类类似。
- 微观概念:接口是一种能力和约定
- 接口的定义:代表了某种能力
- 方法的定义:能力的具体要求
- 经验:Java为单继承,当父类方法种类无法满足子类需求时,可实现接口扩充子类能力
- 接口支持多实现,可为类扩充多种接口
接口的格式
interface 接口名{
静态常量
抽象方法
}
举个栗子:
interface TestInterface{
public final static int NUASA = 10;
public static int NUASB = 20;
public abstract void abstractMethods();
}
1.2 接口与类的异同:
- 相同:
- 可编译成字节码文件。
- 不能创建对象
- 可以作为医用类型
- 具备Object类中所定义的方法
- 不相同 :
- 所有属性都是公开静态常量,隐式使用public static final修饰
- 所有方法都是公开抽象方法,隐式使用public abstract修饰
- 没有构造方法、动态代码块、静态代码块。
1.3 接口的规范:
- 任何类在实现接口时,必须实现接口中所有抽象方法,否则此类为抽象类
实现接口中抽象方法时,访问修饰符必须是Public - 接口的引用
同父类一样,接口也可声明为引用,并指向实现类对象。 - 注意:
仅可调用接口中所声明的方法,不可调用实现类中独有的方法
可强转回实现类本身类型,进行都有方法调用。 - 接口的多态:
多种不同类型的引用指向同一个对象时,表示看待对象视角的不同
不同引用所能看到的对象范围不同,只能调用自身类型中所声明的部分 - 不同类型的引用只能调用自身类型中声明的方法
1.4 接口回调
- 先有接口使用者,后又接口的实现者。
接口定义
public interface EatNoodles{
public void eat(String foods);
}
接口的使用
public class YanYan{
public void getUp(String goods, EatNoodles en){
System.out.println("岩岩起床洗漱");
// 岩岩调用了敢敢的方法
en.eat(goods);
}
}
接口的实现
public class GanGan implments EatNoodles{
@Override
public void eat(String foods){
System.out.print("敢敢和岩岩一起吃:" + foods);
}
public void eatFood(){
YanYan yy = new YanYan();
yy.getUp("大米饭",yy);
}
}
1.5 接口的好处
- 程序耦合度降低
- 更自然地使用多态
- 设计与实现完全分离
- 更容易搭建程序框架
- 更容易更换具体实现
二、JAVA内部类
2.1 内部类的介绍
- 在一个类内部在定义一个完整的类
- 特点:
编译之后可生成独立的字节码文件
内部类可直接访问外部类的私有成员,而不破坏封装。
可为外部类提供必要的内部功能组件
分类:
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
2.2 成员内部类
- 在类内部定义,与实例变量、方法实例方法同级
外部类的一个实力部分,创建内部类对象时,必须依赖外部类对象
当外部类、内部类存在重名属性时,会优先调用内部类属性
成员内部类不能定义静态成员
2.2 静态内部类
- 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员。
只能直接访问外部类的静态成员
2.3 局部内部类
- 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法
局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final.
2.4 匿名内部类
- 没有类名的局部内部类
必须继承一个父类或者实现一个接口
定义类、实现类、创建对象的语法合并,只能创建一个该类的对象。 - 优点:减少代码量。
- 缺点: 可读性较差
三、Object类及其常用方法
- 超类、基类,所有类直接或间接父类,位于继承树最顶端
- 任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类,否自都是间接继承
- Object类中所定义的方法,是所有对象都具备的方法。
- Object类型可以存储任何对象。
- 作为参数,可接受任何对象
- 作为返回值,可返回任何对象。
主要介绍以下5个方法:
• getClass()方法
• hashCode()方法
• toString()方法
• equals()方法
• finalize()方法
3.1 getClass()方法
- 返回应用存储的时机对象类型
- 应用:通常用于判断两个引用中实际存储对象类型是否一致
3.2 hashCode()方法
- 返回该对象的十六进制的哈希码值
- 哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值
- 哈希码并不唯一,可保证相同对象返回相同哈希码,尽量保证不同对象返回不同哈希码。
3.3 toString()方法
- 返回对象字符串表示
- 可以根据程序需求覆盖该方法
3.4 equals()方法
- 比较两个对象地址是否相同
- 可进行覆盖,比较两个对象内容是否相同
- 覆盖步骤:
1.判断两个引用是否指向同一个对象
2.判断obj是否为null
3.判断两个引用指向的实际对象类型是否一致
4.强制类型转换
5.一次比较各个属性值是否相同
3.5 finalize()方法
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
- 垃圾对象:没有有效引用指向此对象时
- 垃圾回收:由GC销毁垃圾对象,释放数据存储空间
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾
- 手动回收机制:使用System.gc():通知JVM执行
本周回忆整理了 Java的接口、内部类、常用类,期望对大家有用