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

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

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

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

  继承的关键字:extends

  格式:
   public class 类名(子类、派生类、超类)  extends 类名(父类、基类) {
  
   }

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

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

  例如:

 class A {}
class B extends A {}
class C extends B {}

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

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

  注意:

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

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

    

 class A {
public A() { // 父类无参构造
System.out.println("*************************") ;
}
}
class B extends A {
public B() { // 子类构造
System.out.println("#########################");
}
}
public class TestDemo {
public static void main(String args[]) {
B b = new B() ; // 实例化子类对象
}
} //运行结果
//*************************
//#########################

默认的

 class A {
public A(String msg) { // 父类构造
System.out.println("*************************");
}
} class B extends A {
public B() { // 子类构造
super("Hello"); // 调用父类构造
System.out.println("#########################");
}
} public class TestDemo {
public static void main(String args[]) {
B b = new B(); // 实例化子类对象
}
}

调用其他构造

3.子类方法重写

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

  要求:  

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

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

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

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

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

  

 public class Person {
public void beAttack(Person per)
{
if(per.check())
boold-=per.harm;
}
} public class Monstrous extends Person{
public void beAttack(Person per)
{
super.beAttack(per);
if(per.check())
System.out.println(showName()+"受到"+per.showName()+"的攻击,减少"+per.showHarm()+"滴血,剩余血量"+boold);
if(!check())
{
System.out.println(per.showName()+"胜利");
}
} }

举个栗子

4.转型

  自动转型:

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

      格式:

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

  强制转型:

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

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

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

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

        2.自动转型

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

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

 public class Person {
public void show(){
System.out.println(".....");
}
}
public class Monstrous extends Person{
public void show1(){
System.out.println("````");
}
}
public class Manager { public static void main(String[] args) {
Person mon1 = new Monstrous();//自动转型
mon1.show();
mon1.show1();//错误
Monstrous mon2 = (Monstrous)mon1;//强制转型
mon2.show1();
}

Java 类的继承详解的更多相关文章

  1. Java类和对象详解,以及相关知识点

    了解类和对象前,简单提及面向对象程序设计.面向对象程序设计就是通过对象来进行程序设计,对象表示一个可以明确标识的实体.例如:一个人.一本书.一个学校或一台电脑等等.每个对象都有自己独特的标识.状态和行 ...

  2. java类和对象详解

    类和对象 java 是面向对象的语言 即 万物皆对象c语言是面向过程语言 一.怎么去描述一个对象? (1)..静态的(短时间内不会改变的东西) 例如:外观,颜色,品牌 (2).动态的(动作) 可以干什 ...

  3. Java类和对象 详解(一)---写的很好通俗易懂---https://blog.csdn.net/wei_zhi/article/details/52745268

    https://blog.csdn.net/wei_zhi/article/details/52745268

  4. 「万字图文」史上最姨母级Java继承详解

    摘要:继承是面向对象软件技术中的一个概念.它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用. 本文分享自华为云社区<「万字图文」史上最姨母级Java继承详解丨[奔跑吧!JAVA] ...

  5. “全栈2019”Java第九十九章:局部内部类与继承详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. 第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解

    第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解 一.    引言 上两节介绍了构造方法的语法及参数,说明了构造方法是Python的类创建实例后首先执行的方法,并说明如果类 ...

  7. [原创]JavaScript继承详解

    原文链接:http://www.cnblogs.com/sanshi/archive/2009/07/08/1519036.html 面向对象与基于对象 几乎每个开发人员都有面向对象语言(比如C++. ...

  8. Java Web(一) Servlet详解!!

    这篇文章到上一篇,距离的有点遥远呀,隔了大概有两个月把,中间在家过了个年,哈哈~ 现在重新开始拾起,最近在看一本个人觉得很棒的书,<Java Web 整合开发王者归来>,现在写的这一系列基 ...

  9. java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock

    原文:java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock 锁 锁是用来控制多个线程访问共享资源的方式,java中可以使用synch ...

随机推荐

  1. 【HDU5687】Trie

    题目大意:需要维护一个支持以下操作的数据结构:(1)支持插入一个字符串(2)支持删除所有前缀等于给定字符串的单词(3)查询该数据结构中是否存在一个以给定字符串为前缀的字符串 题解:由题目可知,需要维护 ...

  2. python中的functools模块

    functools模块可以作用于所有的可以被调用的对象,包括函数 定义了__call__方法的类等 1 functools.cmp_to_key(func) 将比较函数(接受两个参数,通过比较两个参数 ...

  3. Dubbo学习笔记5:Dubbo整体框架分析

    Dubbo的分层架构 本文将简单介绍Dubbo的分层架构设计,如下图是Dubbo官方的整体架构图: Dubbo官方提供的该架构图很复杂,一开始我们没必要深入细节,下面我们简单介绍下其中的主要模块. 其 ...

  4. J2EE的体系结构是指什么?

    J2EE 即Java2平台企业版,它提供了基于组件的方式来设计.开发.组装和部署企业应用.J2EE使用多层分布式的应用模型,这个多层通常通过三层或四层来实现: 客户层,运行在客户计算机上的组件. We ...

  5. JavaScript Cookies取值

    http://www.w3school.com.cn/js/js_cookies.asp

  6. yui压缩JS和CSS文件

    CSS和JS文件经常需要压缩,比如我们看到的XX.min.js是经过压缩的JS. 压缩文件第一个是可以减小文件大小,第二个是对于JS文件,默认会去掉所有的注释,而且会去掉所有的分号,也会将我们的一些参 ...

  7. Maven部署dao工程到私服上——(十三)

    1.修改settings.xml 需要在客户端即(部署dao工程)的电脑上配置 maven环境,并修改 settings.xml 文件,配置连接私服的用户和密码 . 此用户名和密码用于私服校验,因为私 ...

  8. Quartus II 安装教程—FPGA入门教程【钛白Logic】

    Quartus II 工具安装一般分为两个部分,首先是开发工具本身的安装,其次就是器件库的安装,我们可以根据我们的需要选择相应的器件库来安装,这里我们使用Cyclone IV的FPGA,即安装Cycl ...

  9. 【逆向工具】IDA Python安装与使用

    1.IDA Pyhon介绍 IDA Python是IDA6.8后自带插件,可以使用Python做很多的辅助操作,非常方便的感觉. 2.IDA Python安装 从github上IDAPython项目获 ...

  10. xtrabackup 恢复单个表【转】

    一.安装与备份 1. 下载安装XtraBackup$wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/tarba ...