类和对象的高级特征

本章目标

  • 理解继承及其特点
  • 运用Java程序实现继承
  • 掌握java中访问权限修饰符
  • 掌握java中接口
  • 理解多态及其特点
  • 运用Java程序实现多态

继承概念

继承是一种机制,让一个类能够继承另一个类的所有行为和属性。

  • 通过继承,一个类可以拥有已有类的所有功能。
  • 通过继承,所有类都以严格的层次结构来组织。

在这里插入图片描述
继承其他类的类叫子类,被继承的类叫做超类(父类)
在这里插入图片描述
使用Java实现继承

实现步骤:
步骤1:编写父类
步骤2:编写子类,使用关键字继承父类

Java中使用extends关键字实现继承

语法: class 类名 extends 被继承类名 { }

通过继承,子类自动拥有了父类的所有成员属性和方法

注意: Java只支持单继承,不允许多继承,一个子类只能有一个基类,一个基类可以派生出多个子类

在这里插入图片描述

继承的优缺点

优点:

  • 可以继承父类中定义的成员方法以及成员变量,使得子类可以减少代码的书写。还可以重写父类的方法以增加子类的功能。
  • 因为它是面向对象的一个特点,可以复用,缩短开发周期,降低开发成本。

缺点:

  • 就是破坏了类的封装性

子父类之间的成员特点

在这里插入图片描述

子父类中方法的特点

子父类中的方法名同名时(我们称之为重写父类方法) ,当子类出现和父类中方法名相同时,对象调用该方法时程序会自动调用子类的方法,如同父类的方法被子类给覆盖,这种情况是方法的另一个特性,重写(覆盖)

当子类继承父类,将父类的方法继承过来时子类需要使用父类的方法,但是内容却和父类不一致时,我们就可以使用重写这一特性类完成操作
在这里插入图片描述

子父类之间的成员特点

方法重写注意项:

  1. 继承中的方法重写和普通方法重载的区别,他俩之间完全不一样
    (方法重载是方法名相同参数不同,方法重写是方法必须一模一样,包括参数以及返回值类型都的一样)
  2. 子类重写父类方法,必须保证子类的方法的权限大于或等于父类方法的权限才可以重写,否者编写失败
  3. 静态方法知只能重写静态方法

子父类之间的构造方法特点

在对子类的构造方法进行初始化时,父类的构造方法也会跟着一起运行(因为在子类的构造方法中有一条隐式的语句 super();这个super语句会调用父类中空参数的构造方法,而且每一个子类的构造方法中第一行都是super();)

如果要访问父类中的指定构造方法,可以通过手动定义 super()语句的方式访问

注意:

  1. super()语句一定在子类的构造方法的第一行
  2. 构造方法不存在重写

在这里插入图片描述
在这里插入图片描述
java中4种访问权限修饰符分别为

public、protected、default、private,他们这就说明了面向对象的封装性,所以我们要适用他们尽可能的让权限降到最低,从而安全性提高。

在这里插入图片描述

java中final关键字

final (最终) 是一个修饰符

他可以修饰 类 方法 变量;

  1. 被final修饰的类不可以被继承;
  2. 在继承中被final修饰的方法不能被重写;
  3. 被final修饰的变量叫常量,只能赋值一次 ,他及可以修饰成员变量,也可以修饰局部变量;

(abstract) 抽象类

抽象类的基本概念

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。

什么是抽象方法:
在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。

而拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。

创建一个抽象类

abstract class A{//定义一个抽象类
    public void fun(){//普通方法
        System.out.println("存在方法体的普通方法");
    }
    public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
   }

抽象类的使用

从上页代码可知,A是抽象的,他无法直接进行实例化操作。为什么不能直接实例化呢?当一个类实例化之后,就意味着这个对象可以调用类中的属性或者方法,但在抽象类里存在抽象方法,而抽象方法没有方法体,没有方法体就无法进行调用。既然无法进行方法调用的话,又怎么去产生实例化对象呢。

抽象类的使用原则如下:

  1. 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public;
  2. 抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;
  3. 抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类;
  4. 子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有全部实现父类的抽象方法,则必须将子类也定义为abstract类。)

抽象类存在的意义

  1. 确保类不被实例化
  2. 面向对象的很多知识,不是技术,而是设计。正如你所说,普通类完全可以替换抽象类。但从产品角度看,抽象类就是一个温馨提示:你一定要重写我!
  3. 代码一目了然,减少维护难度,也更容易开发。(java中抽象类更利于代码的维护和重用。)

接口 interface

  1. 接口就是某个事物对外提供的一些功能的声明

  2. 可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点,接口出现的意义就是为了 设计 和 实现分离

  3. 使用interface关键字定义接口

  4. 一般使用接口声名抽象方法或常量,接口中的方法只能是声明,不能是具体的实现

在这里插入图片描述

接口的实现 使用关键字 : implements

在实现接口的同时必须实现接口中的方法,当然在接口中如果有常量,我们也可以使用接口中的常量,用法格式:

  • 接口名.属性名;

在这里插入图片描述

接口

在之前的学习中我们知道java不支持多继承只支持单继承,所有这一缺点就使用接口来完成了,接口可以多实现,一个类可以实现多个接口

多态

多态概念:
多态就是现实事务的多种体现形态

如water的三种形态:冰﹑水﹑汽等。就是指“多种形态”
如 人 分为 男人 和 女人 也是指“人的多种形态”

  • 多态使用不同的实例而执行不同操作。
  • 多态实现的方法包括方法重写和方法重载。
  • 软件系统支持多态的前提就是能够静态(编译时)或者动态(运行时)地确定类型。

在后面学习多态的过程中我们围绕着以下三个问题来进行学习

  • 多态的表现形式

  • 多态的作用及好处

  • 多态的应用

多态的表现形式

在这里插入图片描述
在这里插入图片描述

多态的作用及好处

  1. 可替换性:多态对已存在的代码具有可替换性。

  2. 可扩充性:多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。

  3. 接口性:多态是超类通过方法名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。

  4. 灵活性:它在应用中体现了灵活多样的操作,提高了使用效率。

  5. 简化性:多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定。

多态的缺点

  • 只能使用父类的引用访问父类中的已有的成员

引用数据转换

向上转型(类型提升,自动转换)
格式:

父类名 对象名=new 子类构造方法();

向下转型(强制转换)
格式:

父类名 对象名1=new 子类构造方法();
子类名 对象名2=(需要转换子类名) 对象名1;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值