- 浏览: 12750 次
- 性别:
- 来自: 南京
最新评论
继承
在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承。
子类继承父类的域
当子类继承了某个类之后,便可以使用父类中的域,但是并不是完全继承父类的所有域。具体的原则如下:
能够继承父类的public和protected域;不能够继承父类的private域;
对于父类的包访问权限域,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
对于子类可以继承的父类域,如果在子类中出现了同名称的域,则会发生隐藏现象,即子类的域会屏蔽掉父类的同名域。如果要在子类中访问父类中同名域,需要使用super关键字来进行 引用。
子类继承父类的方法
同样地,子类也并不是完全继承父类的所有方法。
能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
注意:隐藏和覆盖是不同的。隐藏是针对域和静态方法的,而覆盖是针对普通方法的。(后面会讲到)
构造器
子类是不能继承父类的构造器的。
调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
在子类中声明一个与父类完全相同的方法,重载机制能正常执行,当要覆盖父类方法时,建议使用@Override注解。它会在你不小心重载了父类方法时给出错误提示。
继承--is a,尽量慎用继承,多用组合;如果必须向上转型,则继承时必须的;否则,就应该好好考虑是否需要继承。
组合--has a
向上转型
由子类转型成父类,在继承图上是向上移动的,因此成为向上转型。
由于子类是父类的一个超级,它只可能比父类拥有更多的方法,所以向上转型总是安全的。所以编译器总是支持向上转型。
举例:
class Instrument {
static void play() {}
static void tune(Instrument i) {
//...
i.play();
}
}
public Wind extends Instrument {
public static void main(String[] args) {
Wind flute = new Wind();
Instrument.tune(flute);//向上转型
}
}
多态
多态,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。
在java中表现为,程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。
java中实现多态的机制:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,动态绑定。
在java中除了static和final以外,其它的方法都是动态绑定。private方法,域,静态方法方法不是多态的,
协变返回类型
在java5中添加了协变返回类型,它表示在子类中的被覆盖的方法可以返回父类方法的返回值类型的某个子类。
向下转型
向下转型也就是在继承层次中向下移动,这样就可以获取更多的信息。
当使用父类或接口定义的引用指向子类或具体实现类对象时,该引用只能调用父类或者接口中的方法,对于子类或者实现类中特有的方法是不能调用的。当需要使用子类或者实现类中特有的方法时,就需要向下转型。如果转型是正确的,那么转型成功;否则,就会返回一个ClassCastException。
在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地从根类Object进行继承。
子类继承父类的域
当子类继承了某个类之后,便可以使用父类中的域,但是并不是完全继承父类的所有域。具体的原则如下:
能够继承父类的public和protected域;不能够继承父类的private域;
对于父类的包访问权限域,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
对于子类可以继承的父类域,如果在子类中出现了同名称的域,则会发生隐藏现象,即子类的域会屏蔽掉父类的同名域。如果要在子类中访问父类中同名域,需要使用super关键字来进行 引用。
子类继承父类的方法
同样地,子类也并不是完全继承父类的所有方法。
能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
注意:隐藏和覆盖是不同的。隐藏是针对域和静态方法的,而覆盖是针对普通方法的。(后面会讲到)
构造器
子类是不能继承父类的构造器的。
调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。
在子类中声明一个与父类完全相同的方法,重载机制能正常执行,当要覆盖父类方法时,建议使用@Override注解。它会在你不小心重载了父类方法时给出错误提示。
继承--is a,尽量慎用继承,多用组合;如果必须向上转型,则继承时必须的;否则,就应该好好考虑是否需要继承。
组合--has a
向上转型
由子类转型成父类,在继承图上是向上移动的,因此成为向上转型。
由于子类是父类的一个超级,它只可能比父类拥有更多的方法,所以向上转型总是安全的。所以编译器总是支持向上转型。
举例:
class Instrument {
static void play() {}
static void tune(Instrument i) {
//...
i.play();
}
}
public Wind extends Instrument {
public static void main(String[] args) {
Wind flute = new Wind();
Instrument.tune(flute);//向上转型
}
}
多态
多态,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。
在java中表现为,程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。
java中实现多态的机制:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,动态绑定。
在java中除了static和final以外,其它的方法都是动态绑定。private方法,域,静态方法方法不是多态的,
协变返回类型
在java5中添加了协变返回类型,它表示在子类中的被覆盖的方法可以返回父类方法的返回值类型的某个子类。
向下转型
向下转型也就是在继承层次中向下移动,这样就可以获取更多的信息。
当使用父类或接口定义的引用指向子类或具体实现类对象时,该引用只能调用父类或者接口中的方法,对于子类或者实现类中特有的方法是不能调用的。当需要使用子类或者实现类中特有的方法时,就需要向下转型。如果转型是正确的,那么转型成功;否则,就会返回一个ClassCastException。
发表评论
-
Java中的四种引用
2018-03-22 15:12 4781、强引用(Strong Referen ... -
java中try、catch、finally中含有return的简单总结
2017-06-01 14:24 549try语句在返回前,将其他所有的操作执行完,保留好要返回的值 ... -
java泛型总结
2016-04-20 13:26 370泛型(generic):是指参数化类型的能力。可以定义泛型类 ... -
对象的序列化与反序列化
2016-04-18 10:22 486序列化:把对象转换为字节序列的过程 反序列化:把字节序列恢 ... -
覆盖hashCode方法
2016-04-15 13:44 601覆盖hashCode方法规约: ... -
通用equals方法
2016-04-14 17:50 5061.1 equals方法 覆盖equals方法必须遵守的 ... -
java对象的创建建议
2016-04-14 16:39 3531.1 考虑用静态工厂方法代替构造器 示例: publi ... -
枚举类型
2016-04-06 15:50 01.1 基本enum特性 public e ... -
String深入理解
2016-04-05 15:33 462String对象是不可变的,每个看起来会修改String对象 ... -
java内部类详解
2016-04-01 15:59 462内部类 可以将一个类 ... -
理解java中的抽象类与接口
2016-03-31 21:42 440抽象方法:仅有声明没 ... -
面向对象四大基本特征
2016-03-31 14:48 426抽象: 抽象就是找出一 ... -
java回调机制
2016-03-31 09:56 413所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调 ... -
jdk动态代理
2016-03-30 17:28 426代理模式: 为其他对象提供一种代理,并以控制对这个对象的访问。 ... -
final和static浅析
2016-03-30 10:47 296final 通常代表“这是无法改变的”。 一般使用到final ... -
java数据存储
2016-03-28 22:42 341Java中数据存储区域包括: 1.寄存器:最快的存储区,由编 ... -
java访问控制权限
2016-03-28 22:34 369java访问控制权限:private,protected,包 ... -
java基本类型
2016-03-28 22:31 315基本类型 java确定了每种基本类型的存储空间大小 基本类型 ... -
Java7语法新特性
2016-03-11 15:17 297转自:http://uuhorse.iteye.com/blo ...
相关推荐
Java继承与多态知识点 Java继承与多态是面向对象编程语言的重要概念,本文将对Java继承与多态进行详细的介绍和解释。 一、继承的含义 继承实际上是存在于面向对象程序中的两个类之间的一种关系。当一个类获取另一...
1继承的概念 2继承的实现 3变量隐藏与方法覆盖 4super关键字 5 子类的构造顺序 6Object类 7 final关键字
Java继承与多态实验报告.doc
Java继承和多态PPT教案学习 本PPT教案主要讲解了Java中的继承和多态机制,包括继承、里式代换原则、多态和动态绑定、方法重载、重载构造函数和方法覆盖等概念。 继承是面向对象编程的基本机制之一,允许一个类继承...
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
这个压缩包"java继承、多态的简单程序.zip"显然包含了一些示例代码,旨在帮助初学者理解这两个概念。接下来,我们将深入探讨Java中的继承和多态性。 ### 继承(Inheritance) 在Java中,继承允许一个类(子类)...
在Java编程语言中,继承和多态是面向对象编程的核心概念。这个代码实例主要展示了如何利用这些特性来处理员工信息的输出。以下是关于这个主题的详细解释。 **继承(Inheritance)** 继承允许一个类(子类)继承另一...
java 继承和多态PPT教程
java 实验 继承与多态rectAngle 定义矩形类,用户输入矩形的长与宽,程序计算其面积和周长;派生子类正方形类,定义一个接口Printable源代码
Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析
Java 中继承与多态的题目 本资源摘要信息是关于 Java 中继承和多态的题目,涵盖了面向对象编程的基本概念和继承机制的应用。 继承的概念 继承是面向对象编程的一种机制,允许一个类(子类)继承另一个类(父类)...
类与类属性:Employee: firstName,lastName,socialSecurityNumber SalaridEmployee: weeklySalary(周薪) HourlyEmployee: wage(每小时的工钱),hours(月工作小时数) CommisionEmployee: grossSales(销售额),...
java封装 继承与多态 程序设计 类与对象
"Java 继承与多态的深入理解" 继承是Java语言中的一种机制,允许一个类继承另一个类的特征和行为,使得子类具有父类的各种属性和方法。继承的特点是:在继承关系中,父类更通用、子类更具体。父类和子类需要满足is-...
### 详解Java接口、继承和多态 #### 一、Java接口 在Java中,接口是一种定义行为的方式,它提供了一种实现抽象方法的手段。通过接口,开发人员可以为类定义一组方法签名,但不提供这些方法的具体实现。这有助于...
"Java继承与多态" Java继承是指一个类从另一个类继承成员变量和成员方法的过程。继承是面向对象编程的核心机制之一,它允许我们创建一个新的类,并继承另一个类的成员变量和成员方法,从而简化代码编写和维护。 在...
在本实验报告中,我们将深入探讨Java编程中的两个核心概念:类的继承和多态的应用。实验主要目标是加深对抽象类和抽象方法的理解,并掌握如何在实际编码中实现类的继承以及多态性。 首先,让我们理解抽象类和抽象...
本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...
Java(继承与多态)