面向对象-多态-final-抽象-接口

本文详细阐述了Java中的多态特性,包括对象的向上转型和方法重写,以及如何通过强转和instanceof解决弊端。同时讨论了final关键字在类、方法和变量上的应用,以及抽象类和抽象方法的定义和使用规则。此外,介绍了模板方法设计模式和接口的概念,强调了接口在弥补类单继承不足和实现多继承中的作用。最后,对比了运行时多态和编译时多态,以及重载和重写的区别和应用场景。
摘要由CSDN通过智能技术生成

1.多态

多态:在继承/实现下的一种体现 ,表现为对象多态、行为多态。(对象的向上转型)

多态的前提:有继承/实现关系;存在父类引用子类;存在方法重写

多态的弊端:无法使用子类型独有的方法,仅仅可以使用重写了的父类方法

解决方法:如果想要使用子类的独有功能,需要强转,为了避免报错用instanceof关键字来得到当前类型的真实类型

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

2.final

类: 不能被继承的类

方法:不能被子类重写的方法

变量: 只能被赋值一次的变量

static final 变量:也被称为常量

3.抽象

abstract: 一种修饰符,用于修饰类和方法 ,这里不谈修饰成员变量

抽象类:

抽象类是一种结构完全的类(和接口区分开来,接口只有常量和抽象最终方法)

抽象类中有 成员变量,成员方法,构造器,代码块。

抽象类不能创建对象

抽象方法:抽象方法只有方法声明(修饰符 返回值),没有方法体({...})

使用抽象类的好处以及注意点

抽象类是一种天生的父类。是用于被子类继承的。

子类如果继承了父类是抽象类,抽象类中的抽象方法必须重写,否则该子类也是抽象类

有抽象方法的一定是抽象类,但抽象类不一定有抽象方法

设计模式-模板方法

解决的问题:解决方法中存在重复代码的问题

怎么写:定义一个抽象类,在里面定义两个方法

1.一个是模板方法,将代码重复的地方放入。(通常会设计为final方法,不允许子类修改)

2.一个是抽象方法,将代码不同的地方 也就是子类需要实现的地方放入。

4.接口

关键字:interface

特点:和抽象类类似,不能创建对象;接口时用来被实现的,实现接口的类成为实现类;接口没有构造方法

接口的构成:

jdk8以前,只能由常量+抽象方法构成(并且其中常量与方法默认有修饰符修饰 public static final 变量 ,public abstract 返回值类型 方法名)

jdk8以后 接口内可以有三种方法:默认方法,静态方法,私有方法

注意:一个类可以实现多个接口,当实现类多个接口。必须重写完全部接口的全部抽象方法,否则就称该类为抽象类并且接口可以多继承 ,接口可以继承多个接口

接口的好处

弥补了类单继承的不足,一个类同时可以实现多个接口 。

接口的注意点

接口可以多继承:可以将多个功能整合在一个接口中,便于类去实现

如果一个类同时继承一个父类,实现一个接口,继承要写在实现的前面。

接口与继承

当一个类实现多接口时,其中同名的方法实现类必须重写。

当一个类又继承父类,又实现接口时,其中同名的方法调用时,调用的是父类的方法。

1.多态的细节:

1)运行时多态和编译时多态的区别

运行时多态:动态绑定 - 方法重写 ,在运行时才能确定调用方法

编译时多态:静态绑定 - 方法重载 ,在编译之前就可以确定调用的方法

2)重载与重写

重载与重写都是多态的体现,重载发生在一个类中,重写发生在子类中,但是对于每个语言来说又是不同的,没有严格的定义。

多态:

方法重载实现的是编译时的多态性(前绑定)

方法重写实现的是运行时的多态性(后绑定)。运行时的多态时面向对象的精髓

实现多态:

方法重写(子类继承父类并重写父类中已有的或抽象方法)

对象造型(用父类型引用指向子类型对象,这样同样的引用调用同样的方法就会根据指向的对象不同 表现出不同的行为)

重载:

发生在同一个类中的多个同名方法中

参数的数据类型或参数的个数、顺序不同

访问修饰符、返回值、抛异常不会影响重载

目的:节省类中的命名资源,提高代码的可读性

重写:

发生在有继承关系的父类和子类中

重写方法的声明要和父类保持一致,访问权限不能小于父类,抛出异常的范围不能大于父类

一般是父类的该方法不满足子类的需求,子类对父类的方法进行重写。

2.接口与抽象类:

实现接口的子类 不能调用super()方法? -- 因为接口没有构造方法

继承抽象类的子了 可以调用super() 方法 -- 因为抽象类是一种特殊的类,有构造方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值