JAVA基础知识(八)

第六章 面向对象(高级篇)

目标:
1.掌握继承的基本概念及实现。
2.掌握继承实现的各种限制。
3.掌握子类对象的实例化过程。
4.掌握方法覆写的概念及实现。
5.掌握super关键字的作用。
6.掌握抽象类与接口的基本概念以及实际应用。
7.掌握对象多态性的作用。
8.掌握常见的设计模式。
9.掌握Object类的作用及其主要方法的作用。
10.掌握包装类的作用,以及自动装箱和拆箱的操作。
11.掌握匿名内部类的使用。

6.1 继承的基本概念

格式 类的继承格式

class 父类{}		//定义父类
class 子类 extends 父类{}//使用extends关键字实现继承

在Java中只允许单继承,不能使用多重继承,即一个子类只能继承一个父类。一个子类可以有一个父类,一个父类还可以有一个父类。

继承的子类有时也称为派生类。
使用extends关键字可以实现继承的关系,但是这个关键字的本身含义是“扩展”,更准确地说是一个类扩展已有类的功能,在其他的书中也会经常把子类称为派生类。

在使用继承的时候也应该注意的是:子类是不能直接访问父类中的私有成员的,但是子类可以调用父类中的非私有方法,但是不能直接调用父类中的私有成员。

6.2.1 子类对象的实例化过程

在继承的操作中,对于子类对象的实例化也是有要求的,即子类对象在实例化之前必须首先调用父类中的构造方法之后再调用子类自己的构造方法。

在实例化子类对象之前需要先将父类中的属性进行初始化。-

6.2.2 方法的覆写

在继承的关系中也存在着方法覆写的概念,所谓的方法覆写就是指子类定义了与父类中同名的方法,但是必须考虑到权限,即被子类覆写的方法不能拥有比父类方法更严格的访问权限。

当子类定义了与父类同名的方法,但是在子类中此方法的访问权限被扩大了,符合覆写的概念,当方法被覆写之后,子类对象调用的将是被覆写后的方法。如果子类覆写的方法权限缩小的话,则在编译时将出现错误提示。

如果现在要在子类的方法找那个访问父类的方法,则使用super关键字即可。

子类如果和父类声明了相同名称的属性,则在子类中直接访问的时候肯定是采用“就近访问原则”,即先找到本类中的属性,如果此时要调用父类中的属性,直接使用“super.”属性格式即可。

方法的重载与覆写的区别

1 单词 Overloading(重载) Overriding(覆写)
2 定义 方法名称相同,参数的类型或个数不同 方法的名称、参数的类型、返回值类型全部相同
3 对权限没有要求 被覆写的方法补鞥呢拥有更严格的权限
4 范围 发生在一个类中 发生在继承类中

6.2.3 super关键字的作用

使用super可以从子类中调用父类中的构造方法、普通方法、属性。

6.4 final关键字

final在Java中表示的意思是最终的意思,也可以称为完结器。可以使用final关键字声明类、属性、方法,在声明时要注意以下几点:
(1)使用final声明的类不能有子类;
(2)使用final声明的方法不能被子类所覆盖。
(3)使用final声明的变量即成为常量,常量不可以修改。

final变量的命名规则。
在使用final声明变量的时候,要求全部的字母大写,例如:INFO,这点在开发中是非常重要的。

如果一个程序中的变量使用public static final声明,则此变量将称为全局常量。

6.5 抽象类的基本概念

前面对类的继承进行了初步的讲解。通过继承,可以从原有的类派生出新的类。原有的类称为基类或父类,而新的了则称为派生类或子类。通过这种机制,派生出的新的类不仅可以保留原有的类的功能,而且还可以拥有更多的功能。
处理上述的机制之外,在Java也可以创建一种类专门用来当做父亲,这种类称为“抽象类”。抽象类的作用有点类似“模板”,其目的是要设计者依据它的格式来修改并创建新的类。但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象。但是在抽象类的使用中同样存在单继承的局限,即一个子类只能继承一个抽象类。
抽象类的定义及使用规则如下:
(1)包含一个抽象方法的类必须是抽象类;
(2)抽象类和抽象方法都要使用abstract关键字声明;
(3)抽象方法只需要声明而不需要实现;
(4)抽象类必须被子类继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法。

格式 抽象类的定义格式

从上面的格式可以发现,抽象类的定义就是比普通类多了一些抽象方法而已,其他地方与普通类的组成基本上都是一样的。

abstract class 抽象类名称{
     属性;
     访问权限 返回值类型 方法名称(参数){  //普通方法
           [return 返回值]}
     访问权限 abstract 返回值类型 方法名称(参数);//抽象方法
     //在抽象方法中是没有方法体的
}

从上面的格式可以发现,抽象类的定义就是比普通类多了一些抽象方法而已,其他地方与普通类的组成基本上都是一样的。

抽象类与普通类的最大区别在于强制。
如果使用普通类,那么子类可以根据自己的需要选择性的进行某些父类方法的覆写,所以普通类无法对子类覆写的方法进行限制。然而抽象类却可以强制性要求子类覆写父类方法,正因为如此,在实际的开发中,不建议让子类继承普通类,而只建议子类继承抽象类。

一个抽象类不能使用final关键字声明。

抽象方法不要使用private声明。
在使用abstract关键字修饰抽象方法的时候不能使用private修饰,因为抽象方法必须被子类覆写,而如果使用了private声明,则子类是无法覆写的。

在一个抽象类中是允许存在构造方法的,因为抽象类依然使用的是类的继承关系,而且抽象类中也存在各个属性,所以子类在实例化之前肯定是要先要对父类进行实例化的。

抽象类和普通类。
实际上抽象类就是比普通类多定义了一个抽象方法而已,除了不能直接进行对象的实例化操作之外并没有任何不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值