多态的一些知识点总结

多态的定义
  • java引用变量有两种类型:
    1.编译时类型:由于声明该变量的时候使用的类型所决定的;
    2.运行时类型:由实际赋值给该变量的对象所决定的
  • 如果编译时类型和运行时类型不一样,就可能出现所谓的多态
  • 多态的意义:
    1.可以替换性:对已存在代码具有可替代性
    2.可扩充性:添加新的子类不影响已经存在的类的多态,继承,以及其他特性的运行和操作
多态的应用

1.引用多态(引用有点类似于C语言中的指针)
* 父类的引用可以指向本类的对象:Animal obj1 = new Animal();
* 父类的引用可以指向子类的对象:Animal obj2 = new Dog();Animal obj3 = new Cat();
2.方法多态

obj1.eat();         //调用父类的
obj2.eat();         //子类重写(Dog类中的eat方法)
obj3.eat()          //子类重写(Cat类中的eat方法)
引用类型转换
  • 向上类型的转换(隐式自动类型转换),是小类型到大类型的转换
Dog obj1 = new Dog();
Animal obj2 = obj1;
  • 向下类型转换(强制类型转换),是大类型到小类型的转换.
Dog obj3 = (Dog) obj2;
  • 基本类型之间的转换只能在数值之间进行转换
  • 引用类型之间的转换只能在具有继承关系的两个类型之间进行

  • 使用instanceof检测是否可以强制转换

Dog dog = new Dog();
Animal animal = new Animal();
if(animal(需要转换的类型)  instanceof Dog(转换的目标类型)){
Dog dog = (Dog) animal;
}
else{
System.out.println("无法类型转换");
}
抽象类和抽象方法
  • 抽象方法和抽象类必须使用abstract修饰符类定义,有抽象方法的类只能被定义成抽象类,抽象类中可以没有抽象方法.
  • 抽象方法和抽象类的使用方法:
    1.使用abstract修饰定义抽象类,抽象方法中不能有方法体.
    2.抽象类不能被实例化,不能使用new关键字创建类的实例
    3.抽象类可以包含成员变量,方法(普通方法和抽象方法),构造器,内部类(接口,枚举)等几种
    4.含有抽象方法的类只能被定义成抽象类.
abstract的几个不能:

1.不能和final同时使用
2.不能修饰成员变量,不能修饰静态变量(不能和static同时使用),不能修饰构造器
3.不能和private同时修饰类和方法
4.抽象方法中不能有方法体.

接口

接口是一种与类相似的结构,只包含常量和抽象方法,接口与抽象类很相似,但两者又有区别:

接口与抽象类区别

抽象类除了包含常量和抽象方法之外,还包含变量和具体方法以及构造器!

接口的特点
  • 接口的关键字是interface
  • 接口的修饰符只能是public
  • 接口可以同时继承多个父接口
  • 其属性只能是常量,只能用public static final做修饰符(参见《java语言程序设计》)
  • 接口不能用new操作符实例化,即不能用new来new出一个对象!
  • 所有方法必须是public abstract的实例方法!
public interface T1{
public static final int k =1;
public asstract void p();

}

等价于:

public interface T1{
 int k =1;
 void p();

}
接口的继承

java中一个类只能继承一个父类,可以通过多个接口来作为补充

  • 一个接口要继承父接口,则使用extend关键字

  • 一个类可以实现一个或者多个接口,实现接口使用implements关键字

  • 如果要继承父类,继承父类必须要在实现接口之前

[修饰符] class 类名 extends 父类 implements 接口 1,接口2...
{

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值