20200929+袁鑫

学习日志:

知识总结:

抽象类和抽象方法
abstract

被abstract关键字修饰的类叫做抽象类,被abstract关键字修饰的方法叫做抽象方法。

抽象方法是没有具体实现(没有方法体)的。abstract不能和final一起使用。

抽象类/抽象方法作用就是定义规范。

抽象方法和普通方法的区别

[修饰符] 返回值类型 方法名([参数列表]){ //普通方法

//方法体

}

[修饰符] abstract 返回值类型 方法名([参数列表]); //抽象方法

抽象类可以有普通办法

如果一个类继承了抽象类,那么这个类必须重写他的抽象方法,或者将类声明为抽象类

抽象类是有构造方法的,但是不能被实例化。

构造方法、类方法(static)不能声明为抽象(abstract)方法

区别:
  • 抽象类有abstract修饰。
  • 抽象类中有可以有抽象方法。
  • 抽象类不能被实例化,需要抽象类变量引用其子类的对象

抽象类除了不能被实例化以外,和普通的类没有区别。定义抽象类是为了强迫子类实现抽象方法,是定义规范的。

上层代码定义规范,不用实现。具体业务实现有子类完成,调用者不用关心。

多态

一个特定类型的变量,可以引用多个不同类型的对象,并且能自动调用银行用对象的方法。也就是说根据引用对象的不同,响应不同的操作。

方法重写是多态的基础

多态中,变量引用的是哪个对象,就执行的是哪个对象中相对应的方法。

向上转型

由子类类型转换成父类类型,称为向上转型。父类引用指向子类对象

多态就是说一个父类可以能有多个子类,每个子类都重写了父类的方法(每个子类都有不同的方法实现),当父类调用方法时,父类引用指向的是哪个子类,就执行那个子类的方法。形成了父类引用调用相同的方法时,有不同的实现。

  • 父类引用只能调用父类中有的方法(子类继承自父类的方法/重写的方法)
  • 父类引用不能调用子类扩展的方法(独有的方法)
向下转型

由父类类型转换成子类类型,称为向下转型。必须要进行强制类型转换。

Dog dog = null;
dog = (Dog) pet;
实现多态的条件
  • 要有继承关系
  • 父类引用指向子类对象(向上转型)
  • 子类要重写父类的方法
多态的应用

特点:

  • 可替换性
  • 可扩充性
  • 接口性
  • 灵活性
  • 简化性
以父类类型作为方法的参数

父类类型出现的地方,子类都可以出现(使用)。

使用父类类型作为方法的返回值

多态的使用:

  1. 接口
  2. 重写
  3. 抽象类方法
public static void main(String[] args) {
    Pet p = new Dog();    
    p.getInstance();  //Dog getInstance()           
    p.staticMethod(); //Pet staticMethod()
}

p.getInstance() 调用的是 Dog 类中的方法,因为在 Dog 类中重写了 Pet 中的 getInstance() 方法,且调用实例方法看的是哪个对象调用就执行哪个对象中的方法。也就是说 by Class 。

p.staticMethod() 调用的是 Pet 类中的方法,因为 staticMethod() 是 static 方法,属于 类。虽然 Dog 类中隐藏了父类的方法,但是调用 static 方法看的是类型,也就是说 by type 。
可以简单的说,调用 static 方法看左边。调用 实例方法 看右边。

接口

接口就是定义规范。

java中的接口作用和生活中类似,他提供一种约定,是实现接口的类在形式上保持一致。

抽象类中可以由普通方法而接口中的方法都是抽象的,也可以说接口是一个特殊的抽象类,接口不能被实例化,而且没有构造方法。

定义接口
[修饰符] interface 接口名{    
    //接口成员 
}

接口中的方法默认是抽象方法,所以可以省略abstract 修饰符

接口中的方法默认都是public的,所以可以省略public

接口中的变量只能是静态变量(static final),所以可以省略 static final,静态常量在定义是就要赋值,且不可变。

使用接口

接口使用和抽象类一样,都是通过子类。子类通过implements关键字实现接口,实现接口就必须实现接口中的抽象方法

注意:

  • 一个类可以实现多个接口,接口之间使用,隔开
  • 接口的实现类中,可以由普通方法
  • 实现的方法必须是public的
实现多个接口

java中继承是单继承,使用extends关键字;但是一个类可以实现多个接口,使用implements,多个接口之间用,隔开。

一个类可以同时继承和实现接口,extends要在implements之前

接口与接口之间是继承关系,使用extends关键字。多个接口使用,隔开。

jdk8之后接口的新特性

在jdk8.0中default关键字可用于在接口中修饰方法(默认方法),default修饰的方法可以有具体实现,也只能在接口中出现。default修饰的方法可以重写。

接口中还可以有static修饰的方法,称之为静态方法(类方法)。类方法可以直接使用接口名.方法名调用

心得:

这两天学习的感觉不是很好,感觉自己像是掌握了,但是自己写那两个类的题目的时候,思绪上有些混乱,还需要更多大量的练习。

标签

评论

this is is footer