Java面向对象05

final关键字

最终的意思,可以修饰类,成员变量和成员方法

作用

修饰类,类不能被继承

修饰变量,就变成了常量,只能怪被赋值一次

修饰方法,方法不能被重写

重点

1、final修饰局部变量

在方法内部,该变量不可以被改变

在方法声明上

基本类型,是值不能被改变

引用类型,是地址值不能被改变

2、final修饰变量的初始化时机在对象构造完毕之前即可

多态

概述

某一个事物,在不同时刻表现出来的不同状态

前提和体现

1、有继承关系

2、有方法重写

3、有父类的引用指向子类的对象

多态成员访问特点

1、成员变量

编译看左边,运行看左边

2、成员方法

编译看左边,运行看右边

3、静态方法(本质上其实是跟类的,实际算不上多态)

编译看左边,运行看左边

好处和弊端

好处

提高了程序的维护性(由继承保证)

提高了程序的扩展性(由多态保证)

弊端

不能访问子类特有功能(解决办法:多态中的转型)

不能通过多态去访问父类和子类同名的方法(super关键字,调用父类的成员)

多态中的转型问题

向上转型

从子类到父类

父类引用指向子类对象

例如:B b=new B(); A a=(A)b;

向下转型

从父类到子类

父类引用转为子类对象

例如:A a=new B(); B b=(B)a;

注意:转型可跨代,但不能跨区(例如,我可以把猫转型成动物,但不能把猫转型成狗)

抽象类

概述

对一个大的事物进行抽象化,而非具体的体现,只需给出个声明即可,用于继承

在java中一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象列

特点

1、抽象类和抽象方法必须用abstract关键字修饰

格式

abstract class 类名{}

public abstract void eat();

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

3、抽象类不能实例化

那么,抽象类如何实例化呢?

按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态

用于初始化父类

4、抽象类的子类

要么是抽象类(父类是抽象类,子类也是抽象类的话,可以不重写父类的抽象方法)

要么重写抽象类中的所有抽象方法

抽象类的成员特点

成员变量

可以是变量,也是常量(final)

构造方法

有构造方法,但是不能实例化,作用是用于子类访问父类数据的初始化

成员方法

可以有抽象方法,限定子类必须完成某些动作

也可以有非抽象方法,提高代码复用性

注意

1、一个类就算没有抽象方法,在定义上也可以是抽象类

因为如果说一堆东西,他们有共同的概念,这个概念在现实生活中是没有具体存在,那么把这个概念抽象化,归结为一个类,这个类就是抽象类

至于这个抽象类有没有抽象方法,取决于这些东西有没有共同的行为,但并不妨碍这个概念的存在

2、abstract不能与以下关键字共存

private 冲突

final 冲突

static 冲突

接口

概述

为了体现事物的拓展性,java提供了接口来定义一些额外功能以供类来实现

特点

1、接口用关键字interface表示 格式:interface 接口名 {}

2、类实现接口用implements表示 格式:class 类名 implements 接口名 {}

3、接口不能实例化

那么接口如何实例化呢?

按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态

4、接口的子类

要么是抽象类(若子类也是抽象类,抽象方法的实现也是可选的)

要么重写接口中的所有抽象法

接口成员特点

成员变量

只能是常量

默认修饰符 public static final

构造方法

没有,因为接口主要是扩展功能的,而没有具体方法

成员方法

只能是抽象方法

默认修饰符public abstract

类与接口之间的关系

类与类

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

类与接口

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

接口与接口

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

抽象类和接口的区别

成员区别

抽象类

变量,常量;有抽象方法,非抽象方法

接口

常量;抽象方法

关系区别

类与类

继承,单继承

类与接口

实现,单实现,多实现

接口与接口

继承,单继承,多继承

设计理念区别

抽象类

被继承体现的是:“is a”的关系 共性关系

接口

被实现体现的是:“like a”的关系 扩展功能

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值