Java 基础知识第四部分。
文章目录
面向对象特性 - 多态

多态针对的是对象。

左父右子就是多态。
其实上面这句说的不太合适,它只是一个表象。我一直都不太懂,可能之前看的教程也是这样说的,我也就这样做了笔记。
现在是觉得接口只是各种定义和规范的集合,不参与实际的干活,真正干活的其实都是类。
多态中成员变量访问特点

在多态的代码中,成员方法访问规则:看 new 的是谁,就优先用谁,没有则向上找。

这句话没怎么懂?
使用多态的好处

对象的向上转型
向上转型就是多态的写法。

对象的向下转型
向上转型是安全的。但有一个弊端:对象一旦向上转型为父类,那么就无法调用子类原本特有的内容。
解决方案:用对象的向下转型[还原]
对象向下转型,其实是一个还原动作。
格式:子类名称 对象名 = (子类名称)父类对象
含义:将父类对象还原成为本来的子类对象(类似强制转换!!!!!!!)

instanceof 关键字
如何知道一个父类引用的对象是什么子类?
格式:对象 instanceof 类名称
这将得到一个 boolean 值结果,判断前面的对象能不能当作后面类的实例。
向下转型一定要进行 instanceof 判断,否则可能会发生类转换异常。
一个案例
- 接口的基本使用
- 对象的上下转型
- 使用接口作为方法参数

final 关键字

final 修饰类
public final class 类名称 { // ... }
含义:当前类不能有任何子类(太监类)
注意:一个类如果是 final 的,那么其中所有的成员方法都无法覆盖重写(因为没有儿子,无法继承)
final 修饰成员方法
final 修饰局部变量
final 修饰成员变量
四种权限修饰符

内部类
内部类概念

成员内部类定义

成员内部类使用
间接方式:在外部类的方法中,使用内部类;然后 main 方法只是调用外部类的方法。
直接方式
外部类名称。内部类名称 对象名 = new 外部类名称 ().new 内部类名称 ();
内部类的同名变量访问
如果出现重名现象,格式为:外部类名称.this.外部类成员变量
public class Outer {
int num = 10;
public class Inner {
int num = 30;
public void method() {
int num = 20;
System.out.println(num);集合
System.out.println(this.num);
System.out.println(Outer.this.num);
}
}
}
局部内部类定义


局部内部类 final 问题
局部内部类,如果希望访问所在方法的局部变量,这个变量必须是有效 final 的
public class MyOuter {
public void method() {
final int num = 10;
class MyInner {
public void methodInner() {
System.out.println(num);
}
}
}
}

生命周期不一样。
匿名内部类(重要!)



类作为成员变量类型
String 也是一个类,自己定义的类当然也可以使用。
当然用的时候需要创建对象。