多态:
多态的好处:提高了代码的扩展性,前期定义的代码可以使用后期的内容(前期定义了一个动物,后面来了一个猪,猪属于动物,可以将猪作为动物传入从而使用)
//一只鸡去吃饭,后来鸡多了,抽成鸡类,让鸡去吃饭;再后来让了猪,再抽取,变成动物,让动物去吃饭。这就是多态的好处
多态的弊端:前期定义的内容不能使用后期子类的特有内容。
多态的前提:1:必须要有关系(继承/实现)
2:必须要有覆盖
注意:如果为了提高扩展性,用父类型创建更好;如果为了使用子类特有功能向下转型。
多态的特点:
成员变量:编译和运行都参考左边
成员函数:编译看左边运行看右边
静态函数:编译和运行都参考左边;其实静态根本不该讨论,因为可以类名调用
内部类:
生成的class字节码文件
生成3个。外部类访问内部类,必须在外部类中创建一个方法,方法中创建内部类的对象才能访问
内部类一般用于类的设计:分析事物时,发现该事物描述中还有事物,而且这个事物还在访问被描述事物的内容
类似:铁扇公主和孙悟空
其他类直接访问内部类中的成员:
Outer.Inner in = new Outer().new Inner();
//解释new后面的内容,外部类对象.成员
如果内部类中定义了静态成员,那么该内部类必须是静态的
几种内部类的书写格式:
还有局部内部类,匿名内部类
局部内部类中访问局部变量,变量必须是final
匿名内部类:就是内部类的简写格式
前提:内部类必须继承或者实现一个外部类或者接口
匿名内部类:其实就是一个匿名子类对象
格式:
new 父类(接口或类){子类内容};
public classHelloWorld {
public static voidmain(String[] args) {
newOuter().method();
}
}
abstract class Demo{
abstract void show();
}
class Outer{
int num = 4;
/* class Inner extends Demo{//内部类
void show(){
System.out.println(num);
}
}*/
public void method(){
new Demo(){
void show(){
System.out.println("run");
}
}.show();
}
}
情景一:当函数的参数是接口类型时,而且接口中的方法不超过三个
可以用匿名内部类作为实际参数进行传递
里面有多个方法时的调用:new其父类
面向对象,对象的初始化过程:1-6的顺序