又是一篇杂记

面向对象的特性之多态

多态:多态的本质就是一个程序中存在多个同名的不同方法,主要通过三种方式来实现:

通过子类对父类的覆盖来实现
通过在一个类中对方法的重载来实现
通过将子类对象作为父类对象使用来实现

向上转型和向下转型

向上就是多态的体现,Father f = new Son();
向下就是将父类变成子类。Son s = (Son) f; 但是向下转型时必须确实是子类才能转。

接口和抽象类

  • 抽象类中可以没有抽象方法,也可以抽象方法和非抽象方法共存
  • 接口中的方法在JDK8之前只能是抽象的,JDK8版本开始提供了接口中方法的default实现
  • 抽象类和类一样是单继承的;接口可以实现多个父接口
  • 抽象类中可以存在普通的成员变量;接口中的变量必须是static final类型的,必须被初始化,接口中只有常量,没有变量

Java 8中接口可以有默认实现方法

如果两个接口中存在同样的默认方法,实现类继承的是哪一个呢?此时就和Java多继承的问题一样,处理方式也类似,重写默认方法,或者指定使用哪个实现方法。

那么JDK8中为什么会出现默认方法呢?

答:使用接口,使得我们可以面向抽象编程,但是其有一个缺点就是当接口中有改动的时候,需要修改所有的实现类。在JDK8中,为了给已经存在的接口增加新的方法并且不影响已有的实现,所以引入了接口中的默认方法实现。

默认方法允许在不打破现有继承体系的基础上改进接口,解决了接口的修改与现有的实现不兼容的问题。该特性在官方库中的应用是:给java.util.Collection接口添加新方法,如stream()、parallelStream()、forEach()和removeIf()等等。在我们实际开发中,接口的默认方法应该谨慎使用,因为在复杂的继承体系中,默认方法可能引起歧义和编译错误。

反射

获取Class类有三种基本方式:

(1)通过类名称.class来获取Class类对象:

Class c = int.class;
Class c = String.class

(2)通过对象.getClass( )方法来获取Class类对象:

Class c = obj.getClass( );//某个对象

(3)通过类名称加载类Class.forName( ),只要有类名称就可以得到Class:

Class c = Class.forName(“cn.ywq.Demo”);

static关键字

在类中,用static声明的成员变量为静态成员变量,也成为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。
从内存角度来看,静态成员变量存放在常量池中,并且是在该类在加载时就会被放入常量池,而非静态成员变量是存放在堆中,局部变量存放在栈中

全部评论

相关推荐

03-11 14:28
浙江大学 设计
牛客小黄鱼:代入一下,独居女生会觉得有点可怕
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务