java 多态, 抽象类, 接口

1. 继承

2. 重写

3.父类引用指向子类对象

传递子类对象

当调用父类被重写的方法时,实际new的是什么子类对象就调用哪个子类对象的方法

执行期间,根据实际对象来调用,而不是父类引用。所以叫动态绑定,也叫多态

既然父类的方法注定要被重写,那就没有必要写实现了,就可以将他定义为抽象方法,那么他所在的类就是残缺不全的,也就是抽象的。

抽象类,抽象方法,是一起出现的,父类有抽象方法,子类必须实现,如果不实现就要把自己也定义为抽象类,那样就不能被实例化了

接口

java只有单继承,只能有一个爸爸,接口就是为了解决多继承存在了,即,一个类可以实现多个接口,

java只是重启了一个名字,叫接口,不再叫类。其实他可以理解为父类,接口的实现类可以理解为他的子类。

class-> interface

extends-> implements

子类 extends 父类

类 implements 接口1,接口2,。。。

类可以实现多个接口,(多继承)

接口中的方法必须全部被重写。

接口 中只能含有 public static final  成员,加 没有具体实现的方法(可以理解为抽象方法),因为没有实现啊

之所以定义为 public static final 是为了解决,当一个类实现多个接口时,如果多个接口中含有同名的成员变量,就会产生问题,

一个类 实现多个接口 可以理解为一个类有多个父类,在内存中new 一个类的对象时,会有多个 父类对象 包含在同一个子类对象中,重名就没办法分清楚了,因此定义为static ,那么这个成员 就不再属于某一个对象,不存放到 堆中,而是放到data segment中,它属于 类,不属于类的对象

多态

其实就是 当存在 继承,重写,并且定义一个父类引用指向一个子类对象时(FuLei  f = new  ZhiLei()),调用父类中那个被子类重写的方法时(f.sing()),其实调用的是方法被重新绑定到子类重写的方法,有点绕,其实就是说,

当调用父类被重写的方法时,实际new的是什么子类对象就调用哪个子类对象的方法(子类重写的那个方法,而不是父类的那个方法)

执行期间,根据实际对象来调用,而不是父类引用。所以叫动态绑定,也叫多态

是一种状态。

当父类引用指向一个子类对象时,只能调用那些父类中被重写的方法,不能调用子类方法,如果需要调用,需要先将父类引用 强制转换成子类引用

接口暴露了这个对象的一部分方法

定义一个接口类型的引用 作为参数,那么任何实现了这个接口方法的 类的对象都可以传进来

f(Singer s ) {

s.sing();

}

类与类之间可以是extends

接口与接口之间可以是extends

类与接口之间 是 implements

接口的引用指向 实现了接口类的对象

父类的引用指向了子类对象

那么接口,站在他的角度看,只能调用被重写的方法,除非强制类型转换,转换另外一个角度

猜你喜欢

转载自blog.csdn.net/hushunhuadao/article/details/84763632