继承与多态 、抽象类、接口

继承:

继承是类与类的一种关系

java中的继承是单继承

继承的好处:

子类拥有父类的所有属性和方法。(修饰符不能是private)

实现代码的复用

语法规则:

class  子类  extends 父类 {

......

}

java中的方法重写:

如果子类对继承父类的方法不满意,是可以重写父类的方法的,当调用方法时会优先调用子类的方法。

语法规则:

返回值类型、方法名、参数类型及个数 都要与父类继承的方法相同,才叫方法的重写。

java中的继承初始化顺序

初始化父类再初始化子类

先执行初始化对象中的属性,再执行构造方法中的初始化

java中的final的使用

final关键字做标识有“最终的”含义。

final可以修饰类、方法、属性、变量

final修饰类,则该类不能被继承

final修饰方法,则该方法不允许被覆盖(重写)

final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)

final修饰变量,则该变量的值只能赋一次值,即变为常量

java中的super的使用

super关键字:

在对象的内部使用,可以代表父类对象。

1、访问父类的属性

super.age

2、访问父类的方法

super.eat();

子类的构造的过程当中必须调用其父类的构造方法。(隐式使用了super)

如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。

如果显示的调用构造方法,必须在子类的构造方法的第一行。

如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。

java中的object类

object类是所有类的父类,如果一个类没有使用extend是关键字明确标识继承另外一个类, 那么这个类默认继承object类。

object类中的方法,适合所有子类。

object类的几个重要方法:

1、toString()方法

在Object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)

可以通过重写toString()方法表示出对象的属性

2、equals()方法

比较的是对象的引用是否指向同一块内存地址。

Dog dog = new Dog();

一般情况下比较两个对象时比较他的值是否一致,所以要进行重写。

Java中的多态

继承是多态实现的基础

对象的多种形态

引用多态:

父类的引用可以指向本类的对象

父类的引用可以指向子类的对象

Animal obj1 = new Animal();

Animal obj2 = new Dog();

方法多态:

创建本类对象时,调用的方法为本类方法

创建子类对象时,调用的方法为子类重写的方法或者继承的方法

多态中的引用类型转换:

向上类型转换(隐式/自动类型转换),是小类型到大类型的转换

Dog dog = new dog();

Animal animal = dog;

向下类型转换(强制类型转换),是大类型到小类型(存在风险)

Dog dog2 = animal;(不可以转换);

Dog dog2 = (Dog)animal;(可以,强制内型转换)

instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题

if(animal  instanceof Cat ){

Cat cat = (Cat) animal;

}else{

……

}

java中的抽象类

语法定义:

抽象类前使用abstract关键字修饰,则该类为抽象类。

应用场景:

a、在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法

准确知道这些子类如何实现这些方法。(约束子类有哪些方法,并不关注如何实现的)

b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性

作用:

限制规定(约束)子类必须实现某些方法,但不关注实现细节

使用规则:

a、abstract定义抽象类

b、abstract定义抽象方法、只有声明,不需要实现

c、包含抽象方法的类是抽象类

d、抽象类中可以包含普通的方法、也可以没有抽象方法

e、抽象类不能直接创建、可以定义引用变量

父类文件

// 抽象类 -- 父类

public abstract class TelPhone {

// abstract定义抽象方法、只有声明,不需要实现

public abstract void call();

public abstract void sendMsg();

}

子类文件

public class CellPhone extends TelPhone {

public void call() {

System.out.println("打电话");

}

public void sendMsg() {

System.out.println("发短信");

}

}

java中的接口

接口的概念:

接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成。

类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。

接口的定义:

和类定义不同,定义接口不再使用class关键字,而是使用interface关键字

接口定义的基本语法:

[修饰符]  interface  接口名 [extends 父接口1,父接口2...]

{

零个到多个常量定义。。。

零个到多个抽象方法的定义。。。

}

接口就是用来被继承、被实现的、修饰符一般建议使用public

注意:不能使用private和protected修饰接口

接口定义:

1、常量:接口中的属性是常量,即使定义时不添加public static final 修饰符,系统也会自动加上

2、方法:接口中的方法只能是抽象方法,即使定义时不添加public static final 修饰符,系统也会自动加上

使用接口:

一个类可以实现一个或多个接口实现接口使用implements关键字,java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以补充。

继承父类实现接口的语法为:

【修饰符】class 类名 extends  父类  implements  接口1,接口2....

{

类体部分// 如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法。

}

//如果要继承父类,继承父类必须在实现接口之前

JAVA继承类phone_JAVA(9)继承与多态相关推荐

  1. java语言类间继承关系是,Java语言类间的继承关系是(    )。

    Java语言类间的继承关系是(    ). 更多相关问题 [判断题] 持有OPEN票的游客不需要机票的确认,可直接按票面时间去机场乘坐飞机.() [填空题] 导游服务性质是().().().().() ...

  2. java final类为什么不能继承_浅谈Java之终止继承:Final类和Fianl方法

    前言 关键字Final不仅可以用来修饰变量,而且对类及其方法的继承也有很大的影响,本文将从类与方法两个方面介绍final关键字的功能. Final类 当关键字final用来修饰类时,其含义是该类不能再 ...

  3. JavA持有类_关于继承:Java持有对象的超类的类型

    本问题已经有最佳答案,请猛点这里访问. 我有两个类动物和狗.因为你可以从动物身上延伸出来.我可以毫无问题地编写这些类,但我注意到我可以像这样创建一个新的dog对象: Dog firstDog = ne ...

  4. java接口类支持多继承

    一个类只能extends一个父类,只能有一个父类,但可以implements多个接口.java通过使用接口的概念来取代C++中多继承.与此同时,一个接口则可以同时extends多个接口,却不能impl ...

  5. 为什么java IO类不用基于继承的设计方案?

    在我初学 Java 的时候,曾经对 Java IO 的一些用法产生过很大疑惑,比如下面这样一段代码.我们打开文件 test.txt,从中读取数据.其中,InputStream 是一个抽象类,FileI ...

  6. ❤️什么是Java 面向对象《装、继承、多态、抽象》?建议收藏)❤️

    Java 面向对象(详解) 一.面向对象 (1).面向对象编程(Object-Oriented Programming,OOP) (2).面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装 ...

  7. java 继承 ppt_理论五继承_JAVA学习课件_ppt_大学课件预览_高等教育资讯网

    Java 继承 例子:请确认各类之间的关系 plane military plane( 军事) passenger plane ( 客机) cargo plane ( 货物) fighter plan ...

  8. 【Java4】实例初始化,类初始化,/接口,多态,final/static,权限修饰符/native

    文章目录 1.实例初始化过程:有几个构造器,就会有几个实例初始化方法 2.实例初始化和类初始化结合:先类(静态)后实 3.接口:只有abstract可省 3.1 鸟类案例:Flyable相当于父类的一 ...

  9. java常用类介绍及源码阅读(ArrayList)

    java.util  类 ArrayList<E> 继承关系: java.lang.Objectjava.util.AbstractCollection<E>java.util ...

最新文章

  1. response设置编码的三种方式
  2. 单点登录(SSO)—简介
  3. java mail smtps,使用javamail发SMTPS邮件,javamailsmtps邮件,Java通常情况下都不会
  4. leetcode算法题--组合总和
  5. 权限管理说明-以Linux为例
  6. 使用OData API批量删除Marketing Cloud里的contact
  7. Java中的多重继承与组合vs继承
  8. java接口开发规范,干货满满
  9. Oracle 多表查询 --笛卡尔集--左连接--右连接--1999 语法--满外连接
  10. python之if经典语句_Python之if语句、字典
  11. 解决CUDA driver version is insufficient for CUDA runtime version
  12. 用libconfig读取配置文件
  13. 从「猜画小歌」,谈企业的「数据困惑」该何去何从?
  14. 软件类配置(七)【ubuntu16.04安装netbeans、opencv并配置开发环境。】
  15. 查找算法之四 斐波那契查找(C++版本)
  16. 【安全研究】免杀对抗之源码免杀
  17. sqlserver中能用when_sqlserver中casewhen用法小结
  18. linux系统进入管理员命令行,电脑如何进入管理员命令提示符
  19. STM32之定时器详解
  20. win7计算机广告更改,Win7电脑如何找到带来弹窗广告的软件【图文教程】

热门文章

  1. java闭包lambda,闭包在groovy vs闭包在java 8(lambda表达式)?
  2. 匹兹堡大学申请条件计算机科学,匹兹堡大学cs
  3. ios 边录音边放_关于Android和iOS系统OneNote支持边录音边记笔记的需求和建议
  4. java多线程init,Java多线程 - 线程 - 初识
  5. windows mobile设置插移动卡没反应_ETC不用时,能不能把卡拔下来
  6. tms570 can 接收大量数据_CAN通讯系列--AUTOSAR架构的CAN Interface7
  7. mysql自动备份脚本linux_一个Mysql自动备份脚本,定时备份MYSQ脚本,linux下Mysql自动备份脚本...
  8. python的难点_初学python的操作难点总结(新手必看篇)
  9. vim尾部空格标红显示插件
  10. tf.variable_scope与tf.tf.get_variable