1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > JAVA学习笔记第八天——接口作为方法参数和返回值 多态 内部类

JAVA学习笔记第八天——接口作为方法参数和返回值 多态 内部类

时间:2023-02-21 06:16:57

相关推荐

JAVA学习笔记第八天——接口作为方法参数和返回值 多态 内部类

一、回顾:

权限修饰符: public -> protected -> (default) ->private

重写:

1.方法名和参数列表一致

2.子类中重写的方法, 返回值类型[小于等于]父类返回值类型

3.权限修饰符,[大于等于]父类方法的权限

final:

类: 类不能被继承

方法: 方法不能被重写

变量: 常量, 不能被修改, 必须初始化

常见的final类:

String Math

String不可变的: CharSequence - 字符序列 - 字符数组

底层实现: 字符数组 -> 字节数组 byte[] value

final value = 其他值

String str = “hello”;

str = “hi”;

接口:

1.公共的抽象方法

2.公共的静态常量 public static final

3.公共的默认方法

4.公共的静态方法[私有的]

5.私有的方法

使用接口:

实现类 implements 接口

实现所有的抽象方法, 默认方法[可以选择性重写]

创建实现类对象, 调用方法

类和接口叫做多实现, 要重写/覆盖[实现]所有的接口的所有抽象方法

和 重复的默认方法

类和类 叫做单继承, 父类中的方法和父接口中的默认方法重复了, 优先调用父类中的方法

Zi extends Fu implements InterfaceA

二、接口作为方法参数, 接口作为返回值:

具体使用的都是接口的实现类对象,示例代码看文章末

三、多态

多态的前提:

class MyInterfaceAImpl extends Object implmenets MyInterfaceAMyInterfaceA a = new MyInterfaceAImpl() -> 向上造型Object o = new MyInterfaceAImpl() -> 向上造型Fu fu = new Zi();Animal a = new Cat();父类型引用 指向 子类型对象 -> 向上造型父类型 a = new 子类型对象();接口类型 a = new 实现类对象();

** 编译器 看 = 左边类型, 运行时JVM 看 = 右边类型**

左边类型决定了变量 能调用哪些方法,

右边类型决定了最终使用的方法是哪个 - 优先调用自己重写过的

口诀: 编译看左边, 运行看右边

提前得知, 引用 到底是什么类型的对象

Animal -> abstract void eat()Cat -> void catchMouse() {}Dog -> void watchHouse() {}多态: Animal a1 = new Cat();Animal a2 = new Dog();ClassCastException: 类型转换异常解决方案: 转换之前先判断引用 实际上是不是要转换的类型对象引用a ==instanceof== 子类型 => boolean问 a 实际上是不是子类型对象

四、内部类: 类中写个类

人体类 心脏类车类 发动机类种类: 成员内部类,静态内部类,局部内部类[匿名内部类]

成员内部类: 权限 public,protected,(default),private

语法:public class Outer{// ...public class Inner{//....}}使用:内部类中, 可以随意使用外部类成员外部类中, 使用内部类成员时需要创建内部类对象无关类中, 使用内部类成员1.间接调用, 在外部类方法中调用内部类方法main方法中, 调用外部类方法2.直接调用, 需要创建内部类对象外部类.内部类 a = new 外部类().new 内部类();内部类和外部类有同名成员变量外部类的成员变量: 外部类.this.变量内部类的成员变量: this.变量

局部内部类: 在方法内部定义类, 只在方法中有效

在局部内部类中, 使用局部变量, 必须是final的JDK8 后, 局部变量事实上没有发生改变, 那么final可以省略一次性的类, 只能用一次不能使用权限修饰符局部内部类, 需要类只使用一次, 优化 -> 匿名内部类

匿名内部类: 继承抽象类或实现接口

语法: new 接口/抽象类() {int a;// 实现的所有抽象方法}匿名内部类, 只能用一次, new一个对象匿名对象, 只能使用一次, 只能调用一次方法

** 注意: 匿名内部类 和 匿名对象 不是一回事 ! ! !**

静态内部类 对比 成员内部类 => 静态方法 和 成员方法

静态内部类:外部类.内部类 a = new 外部类. 内部类();

成员内部类 :外部类.内部类 a = new 外部类().new 内部类();

示例代码:点这./download/guangjian_/12639345

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。