day02-面向对象进阶(二)
多态
什么是多态?
多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。(编译看左边:编译时看父类有没有此方法,没有则报错【因此无法使用子类独有的东西】;运行看右边:运行时实际执行的是子类重写的方法)。

多态的前提
满足三点:有继承/实现关系;存在父类引用子类对象;存在方法重写。
!!成员变量没有多态性:编译看左,运行还是看左!!

多态的好处

类型转换
存在继承/实现时,就可以进行强制类型转换,编译阶段不会报错。
String s = new String();
Integer i = (Integer)s;//编译期间就报错,因为不存在继承/实现关系,不可以强转

instanceof
if(animal instanceof Dog){}
final关键字
final 关键字是最终的意思,可以修饰(类、方法、变量)
修饰类:该类被称为最终类,特点是不能被继承了。
修饰方法:该方法被称为最终方法,特点是不能被重写了。
修饰变量:该变量有且只能被赋值一次。
注意:final** 和 abstract 不能同时修饰同一个类或方法**

注意:
- static+final修饰的成员变量今后叫做常量,不能被改变。常量的单词建议全部大写,多个单词用下划线隔开。
- 23,57这种叫字面量

final修饰的静态变量(常量)的赋值:
- 可以定义的时候就赋值或者可以在静态代码块中赋值(只可选其一,不可以同时存在)
final修饰的实例变量的赋值:
- 可以定义的时候就赋值或者可以在代码块中赋值或者在有参构造器中(此时不可以存在无参构造器)赋值(只可选其一,不可以同时存在)
常量

抽象类和抽象方法


可以直接用抽象类名调用抽象类的静态方法:

模板方法设计模式

public abstract class People {
//模板方法:所有子类都要作文,但是每个子类的正文不一样,我们就可以把正文的书写定义为抽象方法
public void write(){
System.out.println("文章开头");
writeMain();
System.out.println("文章结尾");
}
public abstract void writeMain();
}

接口
JDK8之前,接口中只能定义常量和抽象方法;(可以省略public等关键字 )




接口可以多继承。一个类Impl实现A接口,A接口继承了B和C接口,就相当于Impl实现了A,B,C接口。
JDK8开始接口新增的三种方法:默认方法(实例方法),私有方法,静态方法(类方法)

私有方法只能由当前接口的默认方法和私有方法调用
接口的静态方法只能由接口本身的名字调用
接口其他注意事项(了解)
这里的方法签名冲突可以是:返回值不同但方法名和形参列表相同
实际的方法签名只有方法名和形参列表

Java面向对象进阶学习笔记

被折叠的 条评论
为什么被折叠?



