多态&抽象类&接口

1、多态
1.1什么是多态?多态是在继承或者实现情况下的一种现象,表现为:对象多态、行为多态(同一个对象,调用父类的同一个方法,结果不同)。
1.2多态的具体代码体现

1.3多态的前提有继承/实现关系;存在父类引用指向子类对象;存在方法重写。

多态的一个注意事项

多态是对象、行为的多态,Java中的属性(成员变量)不谈多态。

1.4、调用成员变量:

编译看左边:javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败。

运行也看左边:java运行代码的时候,实际获取的就是左边父类中成员变量的值

1.5、调用成员方法:编译看左边,运行看右边

编译看左边:javac编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败。

运行看右边:java运行代码的时候,实际上运行的是子类中的方法。

2、多态的好处
2.1、在多态形式下,等号左右两边松耦合,更便于修改和维护
2.2、定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利
2.3、多态的弊端

多态下不能使用子类的独有功能。引出的:2.4和2.5

2.4、类型转换

自动类型转换:父类 变量名 = new 子类();

强制类型转换:子类 变量名 = (子类) 父类变量

2.5、类型转换注意事项

存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错。

运行时,如果发现对象的真实类型与强转后的类型不同,就会报类型转换异常(ClassCastException)的错误出来。

2.6、instenceof

如果想避免风险,可以所在使用前使用instenceof判断数据类型

3.final(面试题)
3.1、final 关键字是最终的意思,可以修饰(类、方法、变量)

修饰类:该类被称为最终类, 类不能再被继承

修饰方法:该方法被称为最终方法, 方法不能被重写

修饰变量:该变量只能被赋值一次, 赋值完毕之后不能再修改

成员变量: 声明时或者在构造方法结束之前完成赋值

局部变量: 在使用之前完成赋值

3.2、final修饰变量的注意

final修饰基本类型的变量,变量存储的数据不能被改变。

final修饰引用类型的变量,变量存储的地址不能被改变,但地址所指向对象的内容是可以被改变的。

4.抽象类
4.1、什么是抽象类?

在Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法。

abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法。

4.2、抽象类的特点

4.2.1抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。

4.2.2类该有的成员(成员变量、方法、构造器)抽象类都可以有。

4.2.3抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。

4.2.4一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。(父债子偿)

4.3、抽象类的场景和好处

多个类中只要有重复代码(包括相同的方法签名),我们都应该抽取到父类中去,此时,父类中就有可能存在只有方法签名的方法,这时,父类必定是一个抽象类了,我们抽出这样的抽象类,就是为了更好的支持多态。

4.4、模板方法设计模式

4.4.1、模板方法设计模式解决了什么问题?

一个功能的完成需要经过一系列步骤,这些步骤是固定的,但是中间某些步骤具体行为是待定的,在不同的场景中行为不同

1、定义一个抽象类(父类),提供模板方法

2、模板方法中,需要让子类自己实现的地方,定义为抽象方法

3、子类只需要继承该抽象类,重写抽象方法即可完成些完成的功能

4.4.2、多学一招:建议使用final关健字修饰模板方法

模板方法是给对象直接使用的,不能被子类重写。一旦子类重写了模板方法,模板方法就失效了。

4.5、象类的作用是什么样的?

抽取共性时,无法确定方法体(打印语句不一样),就把方法定义为抽象的。

强制让子类按照某种格式重写。

抽象方法所在的类,必须是抽象类。

5、接口
5.1、认识接口

Java提供了一个关键字interface,用这个关键字我们可以定义出一个特殊的结构:接口。

public interface 接口名 {

成员变量(接口中的成员变量都是常量, 默认是被public static final修饰的)

成员方法(接口中的成员方法都是抽象方法, 默认是被public abstract修饰的)

JDK7以前:接口中只能定义抽象方法。

JDK8的新特性:接口中可以定义有方法体的方法

JDK9的新特性:接口中可以定义私有方法

注意: 接口中不能有构造方法和代码块

}

5.2、注意事项

1. 接口不能直接创建对象

2. 接口是用来被类实现(implements)的,实现接口的类称为实现类。

3. 一个类可以实现多个接口,实现类实现多个接口,必须重写完全部接口的全部抽象方法,

否则实现类需要定义成抽象类。

4.格式

修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {

5.3、接口的好处

(重点是理解)让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现。(解耦合)

5.4、接口和类之间的关系

类和类的关系:

继承关系,只能单继承,不能多继承,但是可以多层继承.

类和接口的关系:

实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实王见多个接口

接口和接口的关系:

继承关系,可以单继承,也可以多继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值