20200929_陈宇_
日志
学习总结:
多态:
一个特定类型的变量,可以引用多个不同类型的对象,并且能自动调用引用对象的方法。也就是 说根据引用对象的不同,响应不同的操作
方法重写是多态的基础
在继承中,子类拥有和父类相同的方法称为重写
多态中,变量引用的是哪个对象,就执行的是哪个对象中相对应的方法
父类类型出现的地方,子类都可以出现(使用)
向上转型:
多态就是说一个父类可能有多个子类,每个子类都重写了父类的方法,当父类调用方法时,父类引用指向的是哪个子类,就执行哪个子类的方法,所以形成了父类引用调用相同的方法时,有不同的实现
父类引用只能调用父类中有的方法(子类继承自父类的方法/重写的方法)
父类引用不能调用子类扩展的方法(独有的方法)
向下转型:
由父类类型转换成子类类型,称为向下转型。必须要进行强制类型转换
注意:首先要判断是否属于要强转的类型( instanceof ),如果不属于会报 java.lang.ClassCastException
实现多态的条件:
1.要有继承关系
2.父类引用指向子类对象(向上转型)
3.子类要重写父类的方法
多态的应用:
特点:
1.可替换性 2.可扩充性 3.接口性 4.灵活性 5.简化性
多态的使用:
1.接口 2.重写 3.抽象类
p.getInstance() 调用的是 Dog 类中的方法,因为在 Dog 类中重写了 Pet 中的 getInstance() 方法,且调用实例方法看的是哪个对象调用就执行哪个对象中的方法,也就是说 by Class
p.staticMethod() 调用的是 Pet 类中的方法,因为 staticMethod() 是 static 方法,属于 类。虽然 Dog 类中隐藏了父类的方法,但是调用 static 方法看的是类型,也就是说 by type
可以简单的说,调用 static 方法看左边,调用实例方法看右边
抽象类:
声明抽象类:用关键字 abstract
抽象方法是没有具体实现(没有方法体)的
abstract 不能和 final 一起使用
抽象类/抽象方法作用就是定义规范
如果一个类继承了抽象类,那么这个类必须重写它的抽象方法,或者将类声明为抽象类 抽象类是有构造方法的,但是不能被实例化
构造方法、类方法( static )不能声明为抽象( abstract )方法
一个类中只要含有抽象方法,这个类就必须是抽象类;抽象类不一定含有抽象方法
抽象类和普通类的区别:
1.抽象类有 abstract 修饰
2.抽象类中可以有抽象方法
3.抽象类不能被实例化,需要抽象类变量引用其子类的对象
抽象方法和普通方法的区别:
普通方法:
[修饰符] 返回值类型 方法名([参数列表]){
//方法体
}
抽象方法:
[修饰符] abstract 返回值类型 方法名([参数列表]);
区别:
1.抽象方法有 abstract 修饰
2.抽象方法没有方法体
3.抽象方法无法执行
4.抽象方法不能用 private 修饰
接口:
可以说接口是一个特殊的抽象类
接口不能被实例化,而且没有构造方法
定义接口:
[修饰符] interface 接口名{
//接口成员
}
接口中的方法默认是抽象方法,所以可以省略 abstract 修饰符
接口中的方法默认都是 public 的,所以可以省略 public
接口中的变量只能是静态常量( static final ),所以可以省略 static final ,静态常量在定义时就要 赋值,且不可变
使用接口:
1.一个类可以实现多个接口,接口之间使用 , 隔开
2.接口的实现类中,可以有普通方法
3.实现的方法必须是 public 的
一个类可以同时继承和实现接口, extends 要在 implements 之前
接口与接口之间是继承关系,使用 extends 关键字。多个接口使用 , 隔开
jdk8接口新特性:
在 jdk8.0 中 default 关键字可用于在接口中修饰方法(默认方法), default 修饰的方法可以有具体实现,也只能在接口中出现,default 修饰的方法可以被重写
接口中还可以有 static 修饰的方法,称为静态方法(类方法)。类方法可以直接使用接口名.方法名调用
学习心得:
今天似乎打瞌睡有点凶,可能是天气突然好了起来,好多东西没听到,休息时间和晚自习请教了一下班上比较厉害的同学,好像有些东西又能明白了,老师布置的作业也加班加紧的完成了,但是就是不晓得是否正确。
近期评论