继承(JAVA)



继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

一、继承的基本语法:

在Java语言中,用extends关键字表示一个类继承了另一个类。例如:

 public class Sub extends Base{

       .......
             }

Sub类到底继承了Base类的哪些东西呢?分为以下两种情况:

① 当Sub类和Base类位于同一个包中:Sub类继承Base类中public、Protected和默认访问级别的成员变量和成员方法

② 当Sub类和Base类位于不同的包中:Sub类继承Base类中public和protected访问级别的成员变量和成员方法

注:

java语言不支持多继承,即一个类只能直接继承一个类,例如以下代码会导致编译错误:

class Sub extends Base1,Base2(......)

所有的Java类都直接或间接地继承Java.lang.Object类。Object类是所有java类的祖先。

二、方法重载(OverLoad)

对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法

注:

重载方法必须满足以下条件:

① 方法名相同

② 方法的参数类型、个数、顺序至少有一项不相同

③ 方法的返回类型可以不相同

④ 方法的修饰符可以不相同

三、方法覆盖(Override)

覆盖方法必须满足多种约束:

① 子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致

② 子类方法不能缩小父类方法的访问权限

③ 子类方法不能抛出比父类方法更多的异常

④ 方法覆盖只存在于子类和父类之间,在同一个类中的方法只能被重载,不能被覆盖

⑤ 父类的静态方法不能被子类覆盖为非静态方法

⑥ 子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法

⑦ 父类的非静态方法不能被子类覆盖为静态方法

⑧ 父类的私有方法不能被子类覆盖

⑨ 父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法 二是子类重新声明父类的抽象方法

⑩ 父类的非抽象方法可以覆盖为抽象方法

四、方法覆盖与方法重载的异同

相同点:

要求方法相同

都可以用于抽象方法和非抽象方法之间

不同点:

方法覆盖要求参数签名必须一致,而方法重载反之

方法覆盖要求返回类型必须一致,而方法重载不做限制

方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方法

方法覆盖对方法的访问权限和抛出的异常有特殊要求,而方法重载无限制

父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次

五、super关键字

super和this关键字都可以用来覆盖java语言的默认作用域,使被屏蔽的方法或变量为可见。

注:

在程序中,在以下情况会使用super关键字:

①在类的构造方法中,通过super语句调用这个类的父类的构造方法

②在子类中访问父类的被屏蔽的方法和属性

六、继承的利弊和使用原则

利弊:

继承关系最大的弱点:打破封装

七、比较组合与继承

1、使用继承关系

从类A和类B中抽象出父类C,它包含了method1()和method2()、method3()方法。由于在类A和类B中都会访问method2()方法。因此把method2()方法声明为protected类型

2、使用组合关系



java继承特征:
(1)继承关系是传递的。若类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。




继承(JAVA)

时间: 2024-12-30 07:02:47

继承(JAVA)的相关文章

Java 线程--继承java.lang.Thread类实现线程

现实生活中的很多事情是同时进行的,Java中为了模拟这种状态,引入了线程机制.先来看线程的基本概念. 线程是指进程中的一个执行场景,也就是执行流程,进程和线程的区别: 1.每个进程是一个应用程序,都有独立的内存空间. 2.同一个进程中的线程共享其进程中的内存和资源. (共享的内存是堆内存和方法区内存,栈内存不共享,每个线程有自己的栈内存) 我们还需要了解以下基本内容: 1.什么是进程? 一个进程对应一个应用程序.例如:在Windows操作系统启动word就表示启动了一个进程.在Java开发环境下

静态继承和动态继承 java

constructor 不带返回类型,否则报错:the constructor call must be the first.. static 方法,静态绑定,不需要被覆盖,也不能被覆盖,不加static修饰时才是被覆盖. 继承理解: 子类Child继承父类Father Child 类对象在堆内存中,包含了从Father类继承的public属性+public方法+自己的属性+自己的方法, 变量的声明 Father f = new Children(); 有几种情况需要注意: 若Father类中的

JAVA学习第十一课(继承)

继承:(extends) 很多类,但是有一些成员,都是重复的,所以为提供复用性,把重复的代码抽取出来,就应用了继承 1.提高了代码的复用性 2.让类与类之间产生了关系,继承给多态提供了前提,没继承就没多态 class MAN { String name; int age; } class student extends MAN //MAN是student的基类,student是MAN的子类 { void study() { System.out.println(name+"正在学习"+

JAVA 继承

一.继承的基本语法: 在Java语言中,用extends关键字表示一个类继承了另一个类. 比如: 子类 extends 父类{ } 子类类到底继承了父类类的哪些东西呢?有 以下两种情况: ① 当子类类和父类类位于同一个包中:子类类继承父类类中public.Protected和默认访问级别的成员变量和成员方法 ② 当子类类和父类类位于不同的包中:子类类继承父类类中public和protected访问级别的成员变量和成员方法 [在JAVA 中一个子类只能有一个直接的父类.] 所有的Java类都直接或

Java:类与继承(隐藏和覆盖的问题)

盒子先生金金 Java:类与继承(隐藏和覆盖的问题) Java:类与继承 Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知识.首先,我们讲述一下与类的初始化相关的东西,然后再从几个方面阐述继承这一大特性.以下是本文的目录大纲: 一.你了解类吗? 二.你了解继承吗? 三.常见的面试笔试题 若有不正之处,请多多谅解并欢迎批评指正. 请尊重作者劳动成果

【Java基础】继承的一些总结

什么是继承 把一些类的具有共性的东西剥离出来形成一个新的类,然后各个其他类保留自己独有的特性,并用关键字extends继承这个剥离出来的新的类,可以最终达到各类原始相同效果,但是在每个类中,单用一个“extends 新类” 就可以减少新类里差不多相同量级的代码量. 继承的格式 class 类1 extends 新类{} 其中新类就是剥离出的有共同特性的类. 继承的适用场景 存在“is a”的关系时,例如猫is a 动物,狗is a 动物. 继承的特点 Java中类只支持单继承 Java中可以多层

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

Java线程示例 - 继承Thread类和实现Runnable接口

进程(Process)和线程(Thread)是程序运行的两个基本单元.Java并发编程更多的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包含多个进程.Java运行时环境就是一个单独的进程,在它内部还包含了作为进程的各种类和程序. 线程 可以将线程看做轻量级的进程.线程存在于进程当中,需要的资源开销较小.同一进程中的线程共享进程的资源. Java多线程 每一个Java引用都只要有一个线程 - 主线程(main thread).虽然后台还运行着许

理解java的三大特性之继承

学习来源:http://www.cnblogs.com/chenssy/p/3354884.html default 默认权限(包权限-同一个包可以访问) private 私有(类内部可以使用,继承的子类也不能访问) protected (类和包内部可以访问,其子类也可以访问) public  任何都可以访问 对于class 的权限修饰只可以用public和default  继承  java中使用extends关键字实现类的继承机制 通过继承,子类自动拥有了基类(superclass)的所有成员