/*文章中用到的代码只是一部分,需要完整代码的可通过邮箱联系我1978702969@qq.com*/

在面向对象的语言中如C++和JAVA,都有一个比较重要的机制——类的继承。这里将对JAVA中的类的继承机制进行讨论。

先提一个问题:为什么要使用继承(后面再解答)。

1.首先是类继承的写法:

继承的关键字:extends

格式:

public class 类名(子类、派生类、超类)  extends 类名(父类、基类) {

}

在C++中可以实现多继承,而在JAVA中存在局限,只能单继承(即一个子类只能继承一个父类)。

而多层继承是C++和JAVA中都能实现的

例如:

1 classA {}2 class B extendsA {}3 class C extends B {}

2.子类能继承到父类的那些内容?

子类能继承到父类的所有的属性和所有的普通方法,不能继承父类的构造方法。

注意:

1.尽管子类能继承到父类的所有的属性和所有的普通方法,但对于父类的私有属性是无法直接访问的,需要调用父类中非私有的操作来进行访问。(即对于所有的非私有(no private)操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成))

2.在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。(如需调用父类的其他构造方法,需使用super)

1 classA {2 public A() { //父类无参构造

3 System.out.println("*************************") ;4 }5 }6 class B extendsA {7 public B() { //子类构造

8 System.out.println("#########################");9 }10 }11 public classTestDemo {12 public static voidmain(String args[]) {13 B b = new B() ; //实例化子类对象

14 }15 }16

17

18 //运行结果19 //*************************20 //#########################

默认的

1 classA {2 public A(String msg) { //父类构造

3 System.out.println("*************************");4 }5 }6

7 class B extendsA {8 public B() { //子类构造

9 super("Hello"); //调用父类构造

10 System.out.println("#########################");11 }12 }13

14 public classTestDemo {15 public static voidmain(String args[]) {16 B b = new B(); //实例化子类对象

17 }18 }

调用其他构造

3.子类方法重写

在C++中,可以在子类中写与父类具有相同函数名的函数实现覆盖。而在JAVA中,也可以通过相同的操作实现重写。但需要注意的是:private或final修饰的方法是不能被重写的。

要求:

1、在子类中可以根据需要对从基类中继承来的方法进行重写。

2、重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。

3、重写方法不能使用比被重写的方法更严格的访问权限。

这里还涉及到super这个关键字

当子类重写方法时,方法中需要重复父类方法的内容,可以使用super,格式:super.方法名(参数值,...)

1 public classPerson {2 public voidbeAttack(Person per)3 {4 if(per.check())5 boold-=per.harm;6 }7 }8

9 public class Monstrous extendsPerson{10 public voidbeAttack(Person per)11 {12 super.beAttack(per);13 if(per.check())14 System.out.println(showName()+"受到"+per.showName()+"的攻击,减少"+per.showHarm()+"滴血,剩余血量"+boold);15 if(!check())16 {17 System.out.println(per.showName()+"胜利");18 }19 }20

21 }

举个栗子

4.转型

自动转型:

要使用自动转型,要求必须存在继承关系。

格式:

父类名  对象名A = new 子类构造方法(参数值,...);

强制转型:

如果一个对象可以被强制转型,那么肯定是在前面某个地方被自动转型过!!!

对于转型的用法,这里可以想象一个场景——老师正在教大学生学习英语;那么这位老师是否可以教初中生学习?高中生?小学生?...

按照常理肯定是可以的,但是用代码需要如何实现???

1.每个类重载一次(会不会觉得太麻烦?)

2.自动转型

考虑到大学生、初中生、高中生、小学生...都属于学生,那么可以通过一个学生的父类派生出这些类,然后在teacher类中写方法时括号内的参数就可以用student类,这样就可以通过自动转型来实现这个问题。(有没有感觉代码一下子少了很多?)

讲到这里继承的大部分的基本内容也讲完了,那么再回到上面的问题——为什么要使用继承:1.提高代码的重用性;2.提高程序的扩展性。

1 public classPerson {2 public voidshow(){3 System.out.println(".....");4 }5 }6 public class Monstrous extendsPerson{7 public voidshow1(){8 System.out.println("````");9 }10 }11 public classManager {12

13 public static voidmain(String[] args) {14 Person mon1 = new Monstrous();//自动转型

15 mon1.show();16 mon1.show1();//错误

17 Monstrous mon2 = (Monstrous)mon1;//强制转型

18 mon2.show1();19 }

View Code

java 继承的写法_Java 类的继承详解相关推荐

  1. java的数组与Arrays类源码详解

    java的数组与Arrays类源码详解 java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 类的 ...

  2. java中static作用_java中static作用详解

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以修饰静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  3. java方法怎么写_java方法定义格式详解,java方法怎么写?

    对于java方法你了解多少呢?你知道java方法应该如何写吗?下面要给大家介绍的就是和java方法相关的内容,一起来了解一下这个概念吧. 在学习运算符的时候,都为每个运算符单独的创建一个新的类和mai ...

  4. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

  5. Java 初始化 代码块_Java中初始化块详解及实例代码

    Java中初始化块详解 在Java中,有两种初始化块:静态初始化块和非静态初始化块. 静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量, ...

  6. java connection 单例_Java设计模式之单例模式详解

    Java设计模式之单例模式详解 什么是设计模式 设计模式是在大量的实践中总结和理论之后优选的代码结构,编程风格,以及解决问题的思考方式.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可 ...

  7. java解析json数据_java解析JSON数据详解

    JSON是目前最流行的轻量级数据交换语言(没有之一).尽管他是javaScript的一个子集.但由于其是独立与语言的文本格式,它几乎可以被所有编程语言所支持. 以下是对java语言中解析json数据的 ...

  8. java代码轻量级锁_Java轻量级锁原理详解(Lightweight Locking)

    转自http://www.cnblogs.com/redcreen/archive/2011/03/29/1998801.html 大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的 ...

  9. java指数表示法_Java指数计数法详解

    Java指数计数法详解 时间:2017-10-16     来源:华清远见Java培训中心 Java指数计数法并不是一个很难的运算,关键是你要理解应用,很多朋友不理解Java指数计数法,所以也无从运用 ...

  10. Java中继承toString方法_java中toString方法详解

    1.Object类中定义有toString方法,用于返回对象的字符串表示(一个可以表示该对象属性内容的字符串),返回的字符串形式为 "类名@hashCode值".下面看Object ...

最新文章

  1. AI时代的领航者,智能电话机器人对市场的影响
  2. 如何防止apk程序被反编译
  3. source insight(SI)使用教程
  4. 分布式消息中间件-Rocketmq
  5. CreateMainWindow 创建主窗口属性
  6. webservice生成客户端的方法
  7. java虚拟机教程图解_深入拆解JAVA虚拟机学习教程
  8. 王昶衡(帮别人名字作诗)
  9. 量化信噪比 非均匀量化_键摄基础1:为什么要正确曝光/ADC精度和量化噪声
  10. Extjs GRID表格组件使用小结
  11. nginx部署静态网站
  12. 《Windows游戏编程大师技巧》二、Windows编程模型
  13. 锐起无盘工作站网卡配置
  14. H5+ 二维码扫描功能
  15. 传奇服务器修改npc外观,传奇NPC里面图片修改方法
  16. cmm是什么意思(风量cmm是什么意思)
  17. 【ReID】EANet: Enhancing Alignment for Cross-Domain Person Re-identification
  18. 【3153万】巴菲特午餐再创天价!细数曾与股神共进午餐的中国大佬丨湾区人工智能...
  19. 微信小程序火车票查询 直取12306数据
  20. 广域网 (PPP协议 HDLC协议)、链路层设备

热门文章

  1. SpringBoot RestTemplate 发送请求 忽略证书不安全
  2. c语言迭代埃特金加速算法,5-埃特金加速迭代算法
  3. mysql临时表关联查询_MySQL如何执行关联查询
  4. CentOS7安装MySQL8报错mariadb-libs is obsoleted by mysql-community-libs-8.0.xx-1.el7.x86_64
  5. 基于微信校园二手书交易小程序系统 毕业设计毕设参考
  6. 打印出从1到1000的罗马数字
  7. JAVA大型OA协同办公系统源码【源码免费分享】
  8. SRRC型号核准的一点澄清-- 设备型产品的SRRC是强制性的,但模块型为非强制性的,有条件可参考性
  9. linux显卡驱动重装
  10. supplicant